2.2. Haswell微架构
Haswell微架构构建在SandyBridge与IvyBridge微架构的成功之上。Haswell微架构的基本流水线功能描述在图2-2中。总之,在2.2.1-2.2.4节描述的大多数特性也适用于Broadwell微架构。Broadwell微架构的增强汇总在2.2.6节。
图2-2. Haswell微架构的CPU核心流水线功能
Haswell微架构提供了以下创新的特性:
· 支持Intel先进向量扩展2(IntelAdvanced Vector Extensions 2,Intel AVX2),FMA。
· 支持加速整数值加密(integer numericencrytion)的通用的新指令。
· 支持Intel®事务式同步的扩展(Intel®Transactional Synchronization Extensions,Intel® TSX)。
· 每核每周期可以分发多达8个微操作。
· 用于内存操作,FMA,AVX浮点与AVX2整数执行单元的256比特数据通路。
· 提升L1D与L2缓存带宽。
· 两条FMA执行流水线。
· 四个算术逻辑单元(ALUS)。
· 三个写地址端口。
· 两个分支执行单元。
· 用于IA处理器核与非计算内核子系统的先进电源管理特性。
· 支持可选的第四级缓存。
这个微架构支持多个处理器核与一个带有若干组件,包括一个连接多个L3片的环(一个片外L4是可选的)、显卡、内存控制器、互联光纤的共享非计算内核(uncore)的子系统灵活整合。可以支持类似图2-3显示的一个四核配置布局。
图2-3. 与Haswell微架构整合的四核系统
2.2.1.前端
Intel微架构Haswell的前端构建在Intel微架构SandyBridge与Intel微架构IvyBridge的基础上,参考2.3.2与2.3.7节。在前端中的增强计有:
· 微操作缓存(或者已解码ICache)在两个逻辑处理器间均匀划分。
· 指令解码器将在每个活动的逻辑处理器间交替工作。如果一个同级逻辑处理器是不活动的,活动的逻辑处理器将持续使用这些解码器。
· 微操作队列(或IDQ)中的LSD可以检测多达56个微操作的小循环。如果激活超线程技术,56项的微操作队列由两个逻辑处理器共享(Intel微架构SandyBridge对每个核提供28项的微操作队列)。
2.2.2.乱序引擎
乱序引擎的关键组件与重要的改进汇总如下:
重命名器:重命名器(Renamer)从微操作队列将微操作移出,绑定到带有执行资源的调度器的分发端口。重命名器执行零习语(zero-idiom),单习语(one-idiom)及零时延的寄存器移动操作来释放调度器与执行核,以提高性能。
调度器:调度器控制微操作到分发端口的分发。乱序执行核心有8个分发端口。其中4个对计算操作提供执行资源。其他4个端口提供每周期多达两个256比特读与一个256比特写的内存操作。
执行核心:调度器可以每周期分发多达8个微操作,每个端口一个。提供计算资源的四个端口,每个提供一个ALU,其中两个提供专用的FMA单元。除了除法/平方根,STTNI/AESNI单元,大多数浮点与整数SIMD执行单元的宽度是256比特。4个为内存操作服务的分发端口包含两个用于读写地址操作的双工端口。所有的内存端口可以处理256比特的微操作。浮点吞吐率的峰值,每周期32个单精度浮点操作与使用FMA每周期16个双精度浮点操作,是Intel微架构SandyBridge的两倍。
乱序引擎可以处理192个正在执行的微操作,相比之下,Intel微架构SandyBridge支持168个微操作。
2.2.3.执行引擎
表2-6汇总了哪些操作可以分发到哪个端口。
表2-6. Haswell微架构的分发端口与执行栈
端口0 | 端口1 | 端口2, 3 | 端口4 | 端口5 | 端口6 | 端口7 |
ALU, Shift | ALU, FastLEA, BM | Load_Addr, Store_Addr | Store_data | ALU, FastLEA, BM | ALU, shift, JEU | Store_addr, Simple_AGU |
SIMD_Log, SIMD_misc, SIMD_Shifts | SIMD_ALU, SIMD_Log |
|
| SIDM_ALU, SIMD_Log |
|
|
FMA/FP_mul, Divide | FMA/FP_mul, FP_add |
|
| Shuffle |
|
|
2nd_Jeu | Slow_int |
|
| FP mov, AES |
|
|
表2-7列出执行单元以及依赖于这些单元有代表性的常见指令。表2-7还包括一些仅在基于Broadwell微架构处理器上可用的指令。
表2-7. Haswell微架构执行单元与有代表性的指令
执行单元 | 端口号 | 指令 |
ALU | 4 | Add, and, cmp, or, test, xor, movzx, movsx, mov, (v)movdqu, (v)movdqa |
SHFT | 2 | Sal, shl, rol, adc, sarx, (adc, 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)blendq*, vblendd |
SIMD_Shft | 1 | (v)psl*, (v)psr* |
SIMD ALU | 2 | (v)padd*, (v)psign, (v)pabs, (v)pcmpeg*, (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 |
保留站(reservation station,RS)被扩展到60个项那么深(对比Intel微架构SandyBridge的54个)。它可以每周期分发多达8个微操作,如果这些微操作都已经就绪。RS通过一个发布端口将一个微操作分发到一个特定的执行群,排列成几个栈来处理特定的数据类型或数据粒度。
当在一个栈中执行的一个微操作的源头来自在另一个栈里执行的微操作时,会导致时延。IntelSSE整数与IntelSSE浮点操作间的转换也会导致时延。在某些情形里,使用添加到指令流的一个微操作来完成数据转换。表2-29描述在执行后回写的数据时,如何旁路到后续周期中执行的微操作。
表2-8. 生产者与消费者微操作间的旁路时延(周期)
来自/去到 | INT | SSE-INT/AVX-INT | SSE-FP/AVX-FP_LOW | X87/AVX-FP_High |
INT |
| 微操作(端口5) 微操作(端口6) + 1周期 | 微操作(端口5) 微操作(端口6) + 1周期 | 微操作(端口5) + 3周期 |
SSE-INT/AVX-INT | 微操作(端口1) |
| 1周期时延 |
|
SSE-FP/AVX-FP_LOW | 微操作(端口1) | 1周期时延 |
| 微操作(端口5) + 1周期 |
X87/AVX-FP_High | 微操作(端口1) + 3周期时延 |
| 微操作(端口5) + 1周期 |
|
Load |
| 1周期时延 | 1周期时延 | 2周期时延 |
2.2.4.缓存与内存子系统
缓存层次结构类似于前代,包括一个指令缓存,第一级数据缓存,每个核中的一个第二级一体缓存,以及大小依赖于产品配置的第三级一体缓存。第三级缓存被组织为多个分片,每个分片的大小依赖于产品配置,并通过一个环互联。缓存拓扑的具体细节由CUPIDleaf 4报告。第三级缓存位于由所有处理器核共享的uncore子系统内。在某些产品配置中,还支持一个第四级缓存。表2-27提供了缓冲层次结构的更多细节。
表2-9. Haswell架构的缓存参数
层级 | 容量/关联数 | 行大小(字节) | 最小时延[2] | 吞吐率(时钟) | 峰值带宽(字节/周期) | 更新策略 |
第一级数据 | 32KB/8 | 64 | 4周期 | 0.5[3] | 64(读)+32(写) | 回写 |
指令 | 32KB/8 | 64 | N/A | N/A | N/A | N/A |
第二级 | 256KB/8 | 64 | 11周期 | 可变 | 64 | 回写 |
第三级(共享L3) | 可变 | 64 | ~34 | 可变 |
| 回写 |
TLB层次结构包含指令缓存专用的第一级TLB,用于L1D的TLB,加上用于L2的一体化TLB。
表2-10. Haswell微架构的TLB参数
层级 | 页大小 | 项数 | 关联数 | 划分 |
指令 | 4KB | 128 | 4路 | 动态 |
指令 | 2MB/4MB | 每线程8 |
| 固定 |
第一级数据 | 4KB | 64 | 4 | 固定 |
第一级数据 | 2MB/4MB | 32 | 4 | 固定 |
第一级数据 | 1GB | 4 | 4 | 固定 |
第二级 | 由4KB及2MB/4MB页面共享 | 1024 | 8 | 固定 |
2.2.4.1. 读写操作的增强
L1数据缓存可以每周期处理两个256比特读与一个256比特写操作。一体化L2每周期可以处理一缓存行。另外,有72个读缓冲与42个写缓冲可用于支持正在执行的微操作。
[1] 仅在基于Broadwell微架构的处理器上可用,并支持CPUIDADX特性标记。
[2] 软件可见的时延依赖于访问模式与其他因素而不同。L3时延会因为处理器核与uncore之间的时钟率而不同。
[3] 第一级数据缓存支持每周期两个读微操作;每个微操作可以获取多达32个字节的数据。