Intel Haswell/Broadwell架構/微架構/流水線 (4)-流水線執行引擎
Execution Engine
下表列出了Haswell微架構的發射口以及對應的操作
Port 0 |
Port 1 |
Port2, 3 |
Port 4 |
Port 5 |
Port 6 |
Port 7 |
ALU, Shift |
ALU, Fast LEA, BM |
Load, STA |
STA |
ALU, Fast LEA, BM |
ALU, Shift, JEU(Branch) |
STA, Simple_AGU |
SIMD_Log, SIMD misc, SIMD_Shift |
SIMD_ALU, SIMD_Log |
|
|
SIMD_ALU, SIMD_Log |
|
|
FMA/FP_Mul, Divide |
FMA/FP_Mul, FP_add |
|
|
Shuffle |
|
|
2nd_JEU |
Slow_int |
|
|
FP mov, AES |
|
|
下表列出的Haswell微架構上的執行單元以及對應的代表指令。表中也列出了一些只存在於Broadwell微架構上的指令。
表:Haswell微架構上的執行單元和代表指令
執行單元 |
數量 |
代表指令 |
ALU |
4 |
add, and, cmp, or, test, xor, movzx, movsx, mov, (v)movdqu, (v)movdqa |
SHFT |
2 |
sal, shl, rol, adc, sarx, (adcx, adox)[1] |
Slow Int |
1 |
mul, imul, bsr, rcl, shld, mulx, pdep |
BM |
2 |
andn, bextr, blsi, blsmsk, bzhi |
SIMD Log |
3 |
(v)pand, (v)por, (v)pxor, (v)movq, (v)blendp*, vpblendd |
SIMD_Shft |
1 |
(v)psl*, (v)psr* |
SIMD ALU |
2 |
(v)padd*, (v)psign, (v)pabs, (v)pavgb, (v)pcmpeq*, (v)pmax, (v)pcmpgt* |
Shuffle |
1 |
(v)shufp*, vperm*, (v)pack*, (v)unpck*, (v)pshuf*, (v)pslldq, (v)alignr, (v)pmovzx*, vbroadcast*, (v)pslldq, (v)pblendw |
SIMD Misc |
1 |
(v)pmul*, (v)pmadd*, STTNI, (v)pclmulqdq, (v)psadw, (v)pcmpgtq, vpsllvd, (v)blendv*, (v)pblendw |
FP Add |
1 |
(v)addp*, (v)cmpp*, (v)max*, (v)min* |
FP Mov |
1 |
(v)movap*, (v)movup*, (v)movsd/ss, (v)movd gpr, (v)andp*, (v)orp* |
Divide |
1 |
divp*, divs*, vdiv*, sqrt*, vsqrt*, rcp*, vrcp*, rsqrt*, idiv |
注1:只存在於Broadwell微架構且支援CPUID ADX特性標誌位的處理器上
預約站RS(即排程器scheduler)擴充套件到了60個條目深(前代Sandy Bridge微架構是54個條目)。如果微指令具備執行條件,每週期可以分發最多達8條微指令。RS通過發射口將微指令分發到某個特定的執行簇。執行簇由若干個執行棧構成,用來處理特定的資料型別或者資料粒度。注:主要參看上面的兩張表:發射口,執行單元,代表指令。
當某個棧中的微指令需要的運算元來自於另一個棧中的某條微指令,有可能發生傳輸延遲。當在Intel SSE整型與Intel SSE浮點型之間發生型別轉換時,也有可能產生轉換延遲。在某些情況下,資料型別轉換可以由新增到指令流裡的一條微指令實現。下表描述執行結果(微指令執行後回寫的結果資料)可以通過旁路傳遞給下一個週期要執行的指令。
表:生產者微指令與消費者微指令的旁路延遲(週期數)
From/To |
INT |
SSE-INT/AVX-INT |
SSE-FP/ AVX-FP_Low |
X87/ AVX-FP_High |
INT |
|
|
|
uop (port 5) + 3 cycle |
SSE-INT/ AVX-INT |
uop (port 1) |
|
1 cycle |
|
SSE-FP/ AVX-FP_LOW |
uop (port 1) |
1 cycle |
|
uop (port 5) + 1 cycle |
X87 / AVX-FP_High |
Uop (port 1) + 3 cycle |
|
Uop (port 5) + 1 cycle |
|
Load |
|
1 cycle |
1 cycle |
2 cycle |