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 |