x86(64位)處理器是否優化了乘法運算,如果其中一個乘法運算結果恰好爲1.0? PS:我不是指編譯器優化1.0的常數乘法。乘以1.0比通常乘法花費的時間更少
1
A
回答
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作爲數組索引時,編譯器會更好。)
相關問題
- 1. FLT_MIN乘法所花費的時間很長
- 2. 乘法計算時間的比較
- 3. 使用OpenMP乘以矩陣需要比序列化的方式花費更多的時間
- 4. 正常乘法的定點乘法
- 5. 免費乘以攜帶期
- 6. 爲什麼分區+分段花費的時間比從普通表查詢花費的時間更長?
- 7. 比較和乘法
- 8. Javascript:解析乘以1.0的數字
- 9. 得分乘法器時間
- 10. Javascript乘法時間表
- 11. 是否比C++中的乘法更貴?
- 12. 的std ::計時乘以持續時間
- 13. MOD操作比乘法更耗CPU嗎?
- 14. ggplot百分比乘以100
- 15. 4位乘以8位彙編乘法
- 16. python的火花矩陣乘法
- 17. 當比較花費任何時間
- 18. 優化乘法比另外
- 19. 數組比較和乘法
- 20. 比較矩陣乘法
- 21. 如何讓for()循環花費更少的時間(android)?
- 22. Unity - 如何減少在更新和GC中花費的時間
- 23. 乘以複用常數C++
- 24. 矩陣乘以常數
- 25. Python中的Karatsuba乘法:執行時間
- 26. 只有乘法硬件支持的16位微控制器的雙倍乘法的執行時間是多少?
- 27. MongoRestore花費比預期更多的時間和CPU
- 28. OpenCover花費更長的時間比NUnit控制檯運行
- 29. INNER JOIN花費更長的時間
- 30. WHere子句花費更長的時間
有很多那裏有x86處理器。通常,乘法時間可能取決於某些CPU上的操作數。 – 2015-03-31 07:09:33