簡體   English   中英

X86 Broadwell 上的吞吐量 FMA 和乘法

[英]Throughput FMA and multiplication on X86 Broadwell

我懷疑最后一個英特爾架構像FMA一樣執行助記符MUL但添加空值(在 BroadWell 架構上)。

詳細地說,我目前正在按照模式執行四次多項式 (Pi) 的乘積。

P1*P2*P3*P4 

每個多項式 Pi(x) = a + bX +cX^2 由兩個連續的FMA評估。 但是,當我測量問題的吞吐量時,數字非常低。 根據第 242 頁的 Agner Fog Agner Fog表, FMAMUL的吞吐量為 0.5。 吞吐量的定義:是在[周期]中執行新的相同助記符的時間。

所以我應該在FMAMUL之間得到一個懲罰,但是我的測量是平滑的。 我懷疑引擎蓋下的處理器通過帶有空添加的FMA交換MUL ,或者至少使用 FPU 中電路的相同部分,這解釋了我的結果。

我可能完全錯了,但如果硬件工程師可以確認或虛弱。

所以我應該在 FMA 和 MUL 之間受到懲罰

是的,從 Agner Fog 的表格中,您應該查看指令在哪些執行端口上運行。 通常就是計算一系列不同指令的吞吐量所需全部內容。 (在像 Broadwell 這樣的現代主流 x86 CPU 上,除 div/sqrt 之外的所有執行單元都是完全流水線化的(可以在每個時鍾周期啟動一個新的 uop),因此只有一些奇怪的微編碼指令(如loop吞吐量低於您預期的吞吐量他們的 uops / 端口。)

Agner 表中的實際“吞吐量”數字主要用作任何奇怪的總結或指示,通常不直接有用,尤其是對於高效的單vmulps指令,如vmulpsvfma...ps 請參閱預測現代超標量處理器上的操作的延遲有哪些注意事項以及如何手動計算它們? 有關如何在延遲、后端端口瓶頸和前端 uop 吞吐量瓶頸方面預測多指令塊性能的更多詳細信息。

但是我的測量很順利。 我懷疑引擎蓋下的處理器通過帶有空添加的 FMA 交換 MUL,或者至少使用 FPU 中電路的相同部分,這解釋了我的結果。

呵呵,沒看懂你剛剛說你認為 MUL 和 FMA 應該相互沖突,但現在你說你認為在 FMA 單元上運行 MUL 解釋了一些事情?


我懷疑最后一個英特爾架構像 FMA 一樣執行助記符 MUL,但添加空值(在 BroadWell 架構上)。

幾乎所有必須對 FP 結果(FP add 除外)進行歸一化的 FP 操作都在 Broadwell 的 FMA 單元上運行。 但是 mul 和 add 在 Broadwell 上有 3 個周期的延遲,而實際 FMA 有 5 個周期的延遲,因此顯然 FMA 單元有不同的配置 MUL/FMA 的吞吐量相同,但 Broadwell 上的延遲不同。

(與 Skylake 不同,后者丟棄了單獨的添加單元,而 mul/add 與 FMA 具有完全相同的 4c 延遲/0.5c 吞吐量)。

在 Broadwell 中具有與 FMA 不同延遲的 MUL 是不尋常的; 大多數 CPU 都以相同的性能運行它們,大概只是將0.0輸入到 add 輸入或等效的東西中。

SIMD 整數乘法也使用 FMA 單元中的乘法器,整數移位也是如此。 大量的東西使用它,但在 Skylake-X 中尤其有意義的是,他們會盡可能多地利用這些晶體管,而不是擁有更多 512 位寬的 SIMD 執行單元。


我目前正在按照模式執行二次多項式 (Pi) 的乘積。 P1*P2*P3*P4

你對結果做什么? 你只做4人小組嗎? 你如何處理每組的結果?

或者您是否在一個巨大的乘法鏈中乘以許多二次多項式,從而創建了一個 mulps 的依賴鏈?

這將使您在每個多項式 3 個周期處遇到瓶頸,每個多項式的獨立計算 (2x FMA) 以創建並行發生的 mulps 的輸入。 在這種情況下,Broadwell 是您理想的 CPU,3 個周期的 mulps 與 Haswell 中的 5 個周期和 Skylake 的 4 個周期。

但是,如果您可以假設 FP 數學是關聯的並具有不同的臨時結果,則可以運行 2、3 或 4 個乘法鏈(甚至更多)並在最后合並,使用具有多個向量的展開循環。 例如(P1*P3*P5*... ) * (P2*P4*P6*...) ,最后的乘法在循環外作為清理的一部分。

請參閱為什么 mulss 在 Haswell 上只需要 3 個周期,與 Agner 的指令表不同? 有關使用多個累加器展開以隱藏 FP 延遲的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM