2015-03-31 67 views
1

x86(64位)處理器是否優化了乘法運算,如果其中一個乘法運算結果恰好爲1.0? PS:我不是指編譯器優化1.0的常數乘法。乘以1.0比通常乘法花費的時間更少

+0

有很多那裏有x86處理器。通常,乘法時間可能取決於某些CPU上的操作數。 – 2015-03-31 07:09:33

回答

2

這不是我在文檔中提到的關於Intel或AMD CPU的指令延遲或微架構的文章。

我懷疑它不會發生,因爲可變延遲會干擾流水線執行單元。 (在同一個時鐘週期內從同一個執行單元出來的多個結果=額外的複雜度)。此外,可能還有其他邏輯位(uop調度/排隊,結果轉發網絡),這些邏輯圍繞具有已知延遲的每個uop而設計。 (除了像division/sqrt這樣的特殊情況)。一個分析師IIRC,也許是Agner Fog或者David Kanter,建議一些uops可能可以實現2個週期的延遲,但需要3個週期來匹配其執行端口可以處理的其他uops。因此,對於英特爾CPU設計來說,持續的操作延遲似乎是一件大事,因爲它值得讓操作變得更慢。

請注意,我們只是在討論延遲。如果您的乘法不是循環運行的依賴鏈的一部分,或者您有足夠的獨立乘法,則可以保持乘法器每個時鐘一次運行。

Haswell CPU可以承受每時鐘2個FP矢量乘法的吞吐量。 (4個雙打或8個浮點的256b個向量)。無論輸入如何,延時= 5個時鐘週期以使結果準備就緒。或每個時鐘1個矢量整數乘法。 (矢量乘ALU在端口0上。矢量FP乘法器在端口0和端口1上)。

當你可以避免乘法時,它會導致很長的依賴鏈。 (通常這會出現整數乘法來計算循環索引,當你編寫你的循環來將計數器增加16,而不是將i++乘以16作爲數組索引時,編譯器會更好。)