簡體   English   中英

端口7可以在最新的Intel x86上存儲AGU的哪種類型的地址?

[英]What type of addresses can the port 7 store AGU handle on recent Intel x86?

從Haswell開始,英特爾CPU微架構在端口7上有一個專用的存儲地址單元,它可以處理某些存儲操作的地址生成uop(另一個uop, 存儲數據總是到達端口4)。

最初人們認為這可以處理任何類型的地址,但似乎並非如此。 該端口可以處理哪些類型的地址?

這個答案適用於Haswell和Skylake(/ Kaby Lake / Coffee Lake)。 未來的ISA(Cannon Lake / Ice Lake)將在可用時進行檢查。 7號AGU是Haswell的新產品。


對於完全可以使用port7的指令(例如,不是vextracti128 ), 任何非索引尋址模式都可以使用端口7。

這包括RIP相對和64位絕對( mov [qword abs buf], eax ,即使在加載到2 ^ 32以上的PIE可執行文件中,因此地址實際上不適合32位),以及正常[reg + disp0/8/32]或絕對[disp32]

索引寄存器總是阻止使用port7 ,例如[rdi + rax][disp32 + rax*2] 即使[NOSPLIT disp32 + rax*1]也不能使用端口7(因此HSW / SKL不會在內部將帶有scale = 1的索引轉換為沒有基址寄存器到base + disp32尋址模式。)

我在ocperf.py stat -etask-clock,context-switches,cpu-migrations,page-faults,cycles,instructions,uops_dispatched_port.port_2,uops_dispatched_port.port_3,uops_dispatched_port.port_7 ./testloop使用ocperf.py stat -etask-clock,context-switches,cpu-migrations,page-faults,cycles,instructions,uops_dispatched_port.port_2,uops_dispatched_port.port_3,uops_dispatched_port.port_7 ./testloop測試自己。


[+0, +2047]位移范圍對於商店沒有區別: mov [rsi - 4000], rax可以使用端口7。

具有小正位移的非索引負載具有1c較低的延遲。 英特爾的優化手冊中沒有提到商店的特殊情況。 Skylake的可變延遲存儲轉發(當負載試圖在存儲之后立即執行時具有更差的延遲)使得構建包含存儲延遲的微基准標記變得困難但是不受存儲地址uops與負載競爭的影響更少端口。 我還沒有通過存儲地址uop提出帶有循環傳遞依賴鏈的微基准,而不是通過存儲數據uop。 據推測它是可能的,但可能需要陣列而不是單個位置。


有些說明根本不能使用port7:

vextracti128 [rdi], ymm0, 0包含商店地址uop(當然),但它只能在端口2或端口3上運行。

Agner Fog的指令表至少有一個錯誤:他列出pextrb/w/d/q只是在p23上運行store-address uop,但事實上它可以在HSW / SKL上使用任何p237。


我沒有詳盡地測試過,但HSW和SKL之間的一個區別我發現1VCVTPS2PH [mem], xmm/ymm, imm8 (指令更改為使用更少的ALU uop,因此不表示HSW和SKL之間p7的變化)。

  • 在Haswell上: VCVTPS2PH是4個VCVTPS2PH (融合和未融合的結構域):p1 p4 p5 p23(Agner Fog是對的)。
  • 在Skylake: VCVTPS2PH xmm是2個融合/ 3個未融合的uops:p01 p4 p237
  • 在Skylake: VCVTPS2PH ymm是3個融合/ 3個未融合的uops:p01 p4 p237

    (Agner Fog將VCVTPS2PH v列為3F / 3U(兩個矢量寬度均為一個條目),缺少xmm版本的微融合,並錯誤地將端口分解列為p01 p4 p23)。

一般來說,要注意Agner最近的更新看起來有點草率,比如復制/粘貼或拼寫錯誤(例如,Ryzen vbroadcastf128 y,m128吞吐量為5而不是0.5)。

1:HSW測試是在一台不再可用的舊筆記本電腦上(我用它的RAM升級另一台仍然可以正常使用的機器)。 我沒有Broadwell可以測試。 這個答案中的所有內容在Skylake上都是如此:我剛才仔細檢查過它。 我剛剛在Haswell上測試了一些這個,但仍然有我的筆記。

暫無
暫無

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

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