亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在執行uop計數不是處理器寬度倍數的循環時性能是否會降低?

在執行uop計數不是處理器寬度倍數的循環時性能是否會降低?

HUH函數 2019-07-27 14:19:35
在執行uop計數不是處理器寬度倍數的循環時性能是否會降低?我想知道各種大小的循環如何在最近的x86處理器上執行,作為uop數的函數。以下是彼得·科德斯(Peter Cordes)的一句話,他在另一個問題中提出了非多數的問題:我還發現,如果循環不是4 uop的倍數,則循環緩沖區中的uop帶寬不是每個循環的常數4。(即它是abc,abc,......;不是abca,bcab,......)。遺憾的是,Agner Fog的microarch doc對循環緩沖區的這種限制并不清楚。問題是關于循環是否需要是N uop的倍數才能以最大uop吞吐量執行,其中N是處理器的寬度。(即最近的英特爾處理器為4)。在談論“寬度”和計算微動時,有很多復雜因素,但我大多想忽略這些因素。特別是,假設沒有微觀或宏觀融合。Peter給出了以下一個循環,其中包含7個uop的循環:一個7-uop循環將發出4 | 3 | 4 | 3 | ...的組我沒有測試更大的循環(不適合循環緩沖區),看看是否有可能從下一個指令開始迭代發布在與其分支相同的組中,但我不假設。更一般地說,聲稱是x在其體內具有uop 的循環的每次迭代將至少進行ceil(x / 4)迭代,而不是簡單地迭代x / 4。對于部分或全部最新的x86兼容處理器,這是真的嗎?
查看完整描述

2 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

這是原始答案的后續內容,根據Andreas Abel提供的測試結果分析其他五種架構的行為:

  • Nehalem處理器

  • 珊迪大橋

  • 常春藤橋

  • Broadwell微架構

  • 咖啡湖

除了Skylake和Haswell之外,我們還快速了解這些架構的結果。它只需要一個“快速”的外觀,因為除了Nehalem之外的所有架構都遵循上面討論的現有模式之一。

首先,短nop情況下運行傳統解碼器(對于不適合LSD的循環)和LSD。以下是針對所有7種體系結構的此方案的周期/迭代。

圖2.1:所有架構密集的nop性能:

這個圖表非常繁忙(點擊查看大圖)并且有點難以閱讀,因為許多架構的結果彼此重疊,但我試圖確保專用閱讀器可以跟蹤任何架構的線路。

首先,我們來討論一下這個大異常值:Nehalem。所有其他架構的斜率大致遵循4 uops / cycle周期線,但Nehalem每個周期幾乎正好是3 uop,因此很快落后于所有其他架構。在最初的LSD區域之外,該線路也是完全平滑的,沒有在其他架構中看到的“階梯”外觀。

這與Nehalem的uop 退休限制為3 uops / cycle 完全一致。這是LSD之外的uops的瓶頸:它們每個周期都執行大約3個uop,退休時瓶頸。前端不是瓶頸,所以準確的uop計數和解碼安排都無關緊要,因此沒有臺階。

除了Nehalem之外,其他架構,除了Broadwell之外,還可以分成幾組:Haswell-like或Skylake-like。也就是說,所有Sandy Bridge,Ivy Bridge和Haswell都表現得像Haswell,因為大于15 uops的循環(在另一個答案中討論了Haswell行為)。盡管它們是不同的微架構,但由于它們的傳統解碼能力相同,因此它們的行為基本相同。低于約15 uops,我們看到Haswell對于任何uop計數而言都要快一些,而不是4的倍數。由于更大的LSD或者還有其他“小循環”優化,它可能會在LSD中額外展開。對于Sandy Bridge和Ivy Bridge,這意味著小循環應該絕對定位一個uop計數,它是4的倍數。

Coffee Lake的行為與Skylake 1相似。這是有道理的,因為微架構是相同的。Coffee Lake看起來比Skylake低約16 uops,但這只是Coffee Lake默認的殘疾LSD的影響。Skylake已經通過啟用的LSD進行了測試,之后由于安全問題,英特爾通過微碼更新禁用了它??Х群谶@個問題出現之后就被釋放了,所以LSD是開箱即用的。因此,對于此測試,Coffee Lake正在使用DSB(對于低于約18 uop的循環,仍然可以適合DSB)或傳統解碼器(對于其余循環),這樣可以獲得更好的小uop計數結果LSD強加開銷的循環(有趣的是,對于較大的循環,LSD和傳統解碼器碰巧強加完全相同的開銷,原因各不相同)。

最后,我們來看看2字節的NOP,它們不夠密集以防止使用DSB(因此這種情況更能反映典型代碼)。

圖2.1:2字節nop性能:

同樣,結果與前面的圖表一致。Nehalem仍然是每個周期3個uop的瓶頸。對于高達約60個uops的范圍,除了Coffee Lake之外的所有架構都使用LSD,我們看到Sandy Bridge和Ivy Bridge在這里表現稍差,四舍五入到下一個周期,因此只實現了4的最大吞吐量uops /循環如果循環中的uops數是4的倍數。在32 uops以上,Haswell和新uarchs的“展開”功能沒有任何影響,所以一切都大致相關。

Sandy Bridge實際上有一些uop范圍(例如,從36到44 uops),它比新架構表現更好。這似乎是因為并非LSD檢測到所有循環,并且在這些范圍內,循環由DSB提供。由于DSB通常更快,因此在這些情況下Sandy Bridge也是如此。

英特爾說的是什么

實際上,您可以在英特爾優化手冊第3.4.2.5節中找到專門處理此主題的部分,正如Andreas Abel在評論中所指出的那樣。在那里,英特爾說:

LSD擁有構建小“無限”循環的微操作。來自LSD的微操作分配在無序引擎中。LSD中的循環以采用分支結束到循環的開頭。循環結束時采用的分支始終是循環中分配的最后一個微操作。循環開始處的指令始終在下一個循環中分配。如果代碼性能受前端帶寬限制,則未使用的分配時隙會導致分配氣泡,并可能導致性能下降。英特爾微體系結構代碼名稱Sandy Bridge中的分配帶寬是每個周期四個微操作。當LSD中的微操作數導致未使用的分配插槽數量最少時,性能最佳。您可以使用循環展開來控制LSD中的微操作數。

他們繼續展示一個例子,由于LSD“四舍五入”,將循環展開一個因子2無助于性能,但是通過三個作品展開。這個例子很混亂,因為它實際上混合了兩個效果,因為展開更多也減少了循環開銷,因此減少了每次迭代的uop數。一個更有趣的例子就是將循環展開次數減少導致由于LSD舍入效應導致性能提高。

本節似乎準確描述了Sandy Bridge和Ivy Bridge的行為。上面的結果表明,這兩種體系結構都如上所述,并且對于分別具有4N + 3,4N + 2或4N + 1 uops的循環,您將丟失1,2或3個uop執行槽。

但是,Haswell及其后來的新性能尚未更新。如在另一個答案中所描述的,性能已經從上述簡單模型改進并且行為更復雜。


1在16 uops有一個奇怪的異常值,其中Coffee Lake表現比其他所有架構都差,甚至Nehalem(回歸率約為50%),但也許這個測量噪音?


查看完整回答
反對 回復 2019-07-27
  • 2 回答
  • 0 關注
  • 959 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號