第二章.Intel®64与IA-32处理器架构
本章给出了当前Intel 64与IA-32处理器(基于Intel®微架构Skylate、Intel®微架构Broadwell、Intel®微架构Haswell、Intel®微架构IvyBridge、Intel®微架构SandyBridge的处理器,基于IntelCore微架构、增强IntelCore微架构、Intel®微架构Nehalem的处理器)软件优化相关特性的一个概览。这些特性有:
· 以高时钟率、高吞吐率执行指令的微架构,一个高速缓存架构系统以及高速系统总线。
· 从Intel Core处理器到IntelXeon处理器家族都存在的多核架构。
· 超线程技术[1](HT技术)支持。
· Intel 64位处理器上的Intel 64位架构。
· SIMD指令扩展:MMX技术,流SIMD扩展(SSE),流SIMD扩展2(SSE2),流SIMD扩展3(SSE3),补充流SIMD扩展3(SSSE3),SSE4.1与SSE4.2。
· Intel®先进向量扩展(Intel®AVX)。
· 半精度浮点转换与RDRAND。
· 融合乘加扩展。
· Intel®先进向量扩展2(Intel®AVX2)。
· ADX与RDSEED。
Intel Core 2,Intel Core 2 Extreme,IntelCore 2 Quad处理器家族, Intel Xeon处理器3000、3200、5100、5300、7300系列基于高性能与节能的IntelCore微架构。IntelCore 3100、3300、5200、7400系列,IntelCore 2 Extreme处理器QX9600、QX9700系列,IntelCore 2 Quad Q9000、Q8000系列基于增强Intel Core微架构。IntelCore i7处理器基于Intel微架构Nehalem。Intel® Xeon®处理器5600系列,IntelXeon处理器E7与IntelCore i7、i5、i3处理器基于Intel微架构Westmere。
Intel® Xeon®处理器E5家族,Intel®Xeon®处理器E3-1200家族,Intel®Xeon®处理器E7-8800/4800/2800家族,Intel®CoreTM i7-3930K处理器,第二代Intel® CoreTMi7-2xxx,CoreTMi5-2xxx,CoreTMi3-2xxx处理器系列基于Intel®微架构Sandy Bridge。
Intel® Xeon®处理器E3-1200 v2家族与第三代Intel®CoreTM处理器基于Ivy Bridge微架构,且支持Intel 64位架构。Intel®Xeon®处理器E5v2与E7v2家族基于IvyBridge-E微架构,支持Intel64位架构及在一个平台上封装多个物理处理器。
Intel® Xeon®处理器E3-1200 v3家族与第四代Intel®CoreTM处理器基于Haswell微架构且支持Intel 64位架构。Intel®Xeon®处理器E526xx v3家族基于Haswell-E微架构,支持Intel64位架构,以及在一个平台上封装多个物理处理器。
Intel® CoreTM M处理器,第五代IntelCore处理器以及IntelXeon处理器e3-1200v4系列基于Broadwell微架构,支持Intel64位架构。
第六代Intel Core处理器,IntelXeon处理器E3-1500v5基于Skylake微架构,支持Intel64位架构。
2.1. SKYLAKE微架构
Skylake微架构构建在Haswell与Broadwell微架构的基础上。图2-1显示了Skylake微架构的基本流水线功能。
[1]超线程技术要求支持HT技术的Intel处理器以及激活HT技术的芯片集、BIOS与操作系统的计算机系统。性能按照使用的硬件与软件而不同。
Skylake微架构提供以下增强:
· 更大的内部缓冲,使更深的OOO(乱序)执行与更高的缓存带宽成为可能。
· 提升前端的吞吐能力。
· 改进分支预测。
· 提升除法器的吞吐能力,降低时延。
· 更低的功耗。
· 以超线程技术提升SMT性能。
· 平衡浮点ADD,MUL,FMA的吞吐率与时延。
这个微架构支持多个处理器核与一个带有若干组件,包括一个连接了多个L3片的环(一个片外L4是可选的)、显卡、内存控制器、互联光纤的共享uncore(非计算内核)子系统灵活整合。可以支持类似图2-3显示布局的一个四核配置。
2.1.1. 前端
Skylake微架构的前端提供超越前代微架构的改进如下:
· 相比前代的4个微操作,遗留解码流水线(LegacyDecode Pipeline)每周期向IDQ交付5个微操作。
· 相比前代的4个微操作,DSB每周期向IDQ交付6个微操作。
· 在同一个核里的同级逻辑处理器是活动时,相比前代的每逻辑处理器28个微操作,IDQ对每个逻辑处理器保持64个微操作(每核2x64对2x28)。如果核上只有一个逻辑处理器是活动的,IDQ可以保持64个微操作(在ST操作中64个微操作对56个微操作)。
· IDQ中的LSD可以检测多达每逻辑处理器64个微操作,不管是ST还是SMT操作。
· 改进分支预测。
2.1.2. 乱序执行引擎
Skylake微架构中乱序执行引擎的改变包括:
· 相比前代,更大的缓冲允许更深OOO(乱序)执行。
· 对除法/开平方及近似倒数提升吞吐率,降低时延。
· 所有运行在FMA单元中的操作具有统一的时延与吞吐率。
· 更长的暂停时延使得更高的功效与更好的SMT执行资源使用率成为可能。
表2-1总结了OOO引擎向各个端口分发各种类型操作的能力。
表2-1. Skylake微架构的分发端口与执行栈
端口0 | 端口1 | 端口2, 3 | 端口4 | 端口5 | 端口6 | 端口7 |
ALU, Vec ALU | ALU, Fast LEA, Vec ALU | LD STA | STD | ALU, Fast LEA, Vec ALU | ALU, Shft | STA |
Vec Shft, Vec Add | Vec Shft, Vec Add |
|
| Vec Shuffle | Branch |
|
Vec Mul, FMA | Vec Mul, FMA |
|
|
|
|
|
DIV | Slow Int |
|
|
|
|
|
Branch2 | Slow LEA |
|
|
|
|
|
表2-2列出了执行单元以及依赖这些单元的一般指令表示。SSE,AVX与通用指令集间吞吐率的提升,与各操作的单元数以及使用一个特定单元的指令种类有关。
表2-2. Skylake微架构执行单元与指令表示1
执行单元 | 单元数 | 指令 |
ALU | 4 | add, and, cmp, or, test, xor, movzx, movsx, (v)movdqu, (v)movdqa, (v)movap*, (v)movup* |
SHFT | 2 | sal, shl, rol, adc, sarx, adcx, adox等 |
Slow Int | 1 | mul, imul, bsr, rcl, shld, mulx, pdep等 |
BM | 2 | andn, bextr, blsi, blsmsk, bzhi等 |
Vec ALU | 3 | (v)pand, (v)por, (v)pxor, (v)movq, (v)movap*, (v)movup*, (v)andp*, (v)orp*, (v)paddb/w/d/q, (v)blendv*, (v)blendp*, (v)pblendd |
Vec Shft | 2 | (v)psllv*, (v)psrlv*, imm8中的向量偏转数(vector shift count) |
Vec Add | 2 | (v)addp*, (v)cmpp*, (v)max*, (v)min*, (v)padds*, (v)paddus*, (v)psign, (v)pavgb, (v)pcmpeg*, (v)pmax, (v)cvtps2dq, (v)cvtdp2ps, (v)cvtsd2si, (v)cvtss2si |
Shuffle | 1 | (v)shufp*, vperm*, (v)pack*, (v)unpck*, (v)punpck*, (v)pshuf*, (v)pslldq, (v)alignr, (v)pmovzx*, vbroadcast*, (v)pslldq, (v)psrldq, (v)pblendw |
Vec Mul | 2 | (v)mul*, (v)pmul*, (v)pmadd* |
SMID Misc | 1 | STTNI, (v)pclmulqdq, (v)psadw, 在xmm中的向量偏转数 |
FP Mov | 1 | (v)movsd/ss, (v)movd gpr |
DIVIDE | 1 | divp*, divs*, vdiv*, sqrt*, vsqrt*, rcp*, vrcp*, rsqrt*, idiv |
注:
1. 这个表没有涵盖映射到MMX指令的执行单元。参考11.16.5节关于MMX指令吞吐率的补救。
SSE,AVX与通用指令的一个重要部分也包含了时延降低。附录C列出具体的细节。指令的软件可见时延有时包括依赖于生产者指令微操作流与消费者指令微操作流之间关系的额外贡献。例如,一个像VPMULLD的两微操作指令可能经历两个累积的1周期旁路(bypass)时延,分别来自这两个微操作中的一个。
表2-3描述了生产者微操作与消费者微操作之间的旁路时延周期数。最左列列出生产者微操作在各种情况下的特点。最上行列出消费者微操作在各种情况下的特点。
表2-3. 生产者与消费者微操作间的旁路时延
| SIMD/0, 1/1 | FMA/0, 1/4 | VIMUL/0, 1/4 | SIMD/5/1, 3 | SHUF/5/1, 3 | V2I/0/3 | I2VI/5/1 |
SIMD/0, 1/1 | 0 | 1 | 1 | 0 | 0 | 0 | NA |
FMA/0, 1/4 | 1 | 0 | 1 | 0 | 0 | 0 | NA |
VIMUL/0, 1/4 | 1 | 0 | 1 | 0 | 0 | 0 | NA |
SIMD/5/1, 3 | 0 | 1 | 1 | 0 | 0 | 0 | NA |
SHUF/5/1, 3 | 0 | 0 | 1 | 0 | 0 | 0 | NA |
V2I/0/3 | NA | NA | NA | NA | NA | NA | NA |
I2VI/5/1 | 0 | 0 | 1 | 0 | 0 | 0 | NA |
对旁路而言,与生产者/消费者相关的属性是微操作的三元组,缩写/一个或多个端口号/时延周期。例如:
· “SIMD/0, 1/1”适用于分发到端口0或端口1的1周期的向量SIMD微操作。
· “VIMUL/0, 1/4”适用于分发到端口0或端口1的4周期的向量整数乘法微操作。
· “SIMD/5/1, 3” 适用于分发到端口5的1周期或3周期非混排(non-shuffle)微操作。
2.1.3. 缓存与内存子系统
Skylake微架构的缓存层次结构具有以下增强:
· 相比前代,更宽的缓存带宽。
· 通过扩大的缓冲同时处理更多的读写。
· 相比Haswell微架构与更前世代的一个页面的遍历,处理器可以并行遍历两个页面。
· 页面分解读的代价从前代的100个周期降到5个周期。
· L3写带宽从前代的每行4个周期增加到每行2个周期。
· 支持CLFLUSHOPT指令刷出缓存行,以及使用SFENCE管理被刷出数据的内存序。
· 降低一个指定空指针的软件预取的性能损失。
· L2的关联性从8路改为4路。
表2-4. Skylake微架构的缓存参数
层级 | 容量/关联性 | 行大小(字节) | 最小时延[1] | 带宽峰值(字节/周期) | 持续带宽(字节/周期) | 更新策略 |
第一级数据 | 32KB/8 | 64 | 4周期 | 96(2x32B读+32B写) | ~81 | 回写 |
指令 | 32KB/8 | 64 | N/A | N/A | N/A | N/A |
第二级 | 256KB/4 | 64 | 12周期 | 64 | ~29 | 回写 |
第三级(共享L3) | 每核多达2MB/多达16路 | 64 | 44 | 32 | ~18 | 回写 |
TLB层次结构包含专用于指令缓存的第一层TLB,用于L1D的TLB,加上用于L2的一体TLB。表2-5的划分列表示在激活超线程技术时的资源共享策略。
表2-5. Skylake微架构的TLB参数
层级 | 页大小 | 入口数 | 关联数 | 划分 |
指令 | 4KB | 128 | 8路 | 动态 |
指令 | 2MB/4MB | 每线程8个 |
| 固定 |
第一级数据 | 4KB | 64 | 4 | 固定 |
第一级数据 | 2MB/4MB | 32 | 4 | 固定 |
第一级数据 | 1GB | 4 | 4 | 固定 |
第二级 | 由4KB及2/4MB页面共享 | 1536 | 12 | 固定 |
第二级 | 1GB | 16 | 4 | 固定 |