處理器結構--MicroOp &&MacroOp Fusion

MicroOp Fusion

也成爲微指令操作融合,將多個相同的彙編指令編譯的uops融合到一個微指令中,使得ALU在執行指令時可以在一個Cycle中執行完畢,提高指令執行的吞吐量

指令融合背景

RAT(Register Renaming Table)以及RRF(Retirement Register File)在PipeLine中已經到了瓶頸,最大吞吐量只能到每個Clock Cycle執行3條uop。爲了突破該瓶頸,設計者們將在以前分割成兩個uop的指令進行合併處理,他們稱之爲微指令融合(uop fusion)。

融合操作在大多數的PipeLine流程中共享同一條uop,並且在ROB(Reorder Buffer)中只佔一個Entry。但是單條ROB Entry代表了兩個操作,這兩個操作必須由兩個不同的執行單元完成。而融合後的ROB Entry也會也會被分發到兩個不同的執行端口,但是最後會作爲單個單元返回到ROB Entry。

微指令融合技術只能用於兩種:

  • 內存寫操作
  • 讀-修改操作

內存寫操作(Memory Write)

一個內存寫操作包括計算內存地址,傳輸數據。在以前的處理器中,這兩個操作會被分成兩個uops,第一個uop使用端口3只關心內存地址的計算,而第二個uop使用端口4關心數據的傳輸。 而讀操作只需要在一個uop使用端口2,所以它和之前的處理器是一樣的。

內存讀-修改(Read-Modify)

例如ADD EAX,[mem32]包含了兩個操作:

  • 從端口2讀[mem32]的數據
  • 從端口0或者1將數據與EAX寄存器中數據相加

這些指令在Pentium M之前的處理器都是被分成兩個uop,而在Pentium M之後就被融合了。這種融合只適用於常規的寄存器,浮點棧指針寄存器,MMX寄存器,而不適用於XMM寄存器。

而一個讀-改-寫的操作,例如ADD [mem32],EAX則不會融合讀-修改的uop,不過它可以融合成兩個寫的uop。 例如以下的指令融合:

; Example 7.2. Uop fusion
mov [esi], eax ; 1 fused uop
add eax, [esi] ; 1 fused uop
add [esi], eax ; 2 single + 1 fused uop
fadd qword ptr [esi] ; 1 fused uop
paddw mm0, qword ptr [esi] ; 1 fused uop
paddw xmm0, xmmword ptr [esi] ; 4 uops, not fused
addss xmm0, dword ptr [esi] ; 2 uops, not fused
movaps xmmword ptr [esi], xmm0 ; 2 fused uops

Pentium M的ROB已經重新設計,以至於ROB中的每一個Entry都可以擁有三個輸入依賴,而以前的設置只允許兩個。

例如,指令MOV [ESI+EDI],EAX以及ADD EAX,[ESI+EDI]都有三個輸入依賴,也就是ESIEDI以及EAX都必須全部都準備好指令才能被執行。進入執行單元卻沒有融合的uop依舊只有兩個輸入依賴。MOV [ESI+EDI],EAX被分割成地址計算的uop,而該uop依賴於ESI以及EDI,以及一個保存的uop,而該uop依賴於地址計算的uop以及EAX的輸出。 相似的是,ADD EAX,[ESI+EDI]被分割成一個讀uop依賴於ESI以及EDI寄存器,以及一個ADD的uop依賴於讀up以及EAX的輸出。這些不能融合的uop只能擁有兩個輸入依賴。 ADC EAX,EBX以及CMOVE EAX,EBX都有三個輸入依賴:EAX以及EBX以及Flags```寄存器。這些指令不能融合,他們必須生成兩個uop。

微指令融合

一個CMPTEST指令後一定會有一條有條件的跳轉指令,而這兩條指令則可以融合(Fused)到單條Macro-op中。所有版本的CMPTEST指令以及所有的有條件跳轉的指令都適用Macro-op融合。 除了:CMP以及TEST後擁有一條Rip相對尋址或者一個位移與立即操作數操作的指令無法融合 例如:

; Example 19.1. Instruction fusion on Bulldozer  

test eax,4
jnz L1 ;       // fused into one op
cmp [Mydata],eax ;     //  rip-relative address in 64 bit mode
jb L2 ;     //  not fused if rip-relative address
cmp dword ptr[rsi+8],2 ;    //  both displacement and immediate operand
jl L3 ;    //  not fused
cmp [Mydata+rbx*4],eax ;    //  32-bit absolute address + scaled index
jg L3 ;     //  fused
dec ecx
jnz L4 ;     //  not fused. Only cmp and test can fuse

沒有其他的ALU指令可以與有條件跳轉的指令融合。最大程度的解碼速度不會因爲指令融合而增加。

優勢

uop融合有以下優點:

  • 解碼更加高效,因爲生成一個融合的OP的指令可以進入三個解碼器中的任何一個,而生成兩個OP的指令只能到解碼器D0
  • 當生成更少的OPS時,寄存器重命名和Retirement的負載減少
  • uop融合後,ROB的容量會增加

參考資料

Microbenchmarking fused instruction MicroFusion in Intel CPUs MacroFusion in Intel CPUs microarchitecture

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章