内容导航 第1页:前言:0.09微米,3.4G的全新高度 第2页:Prescott 的流水线操作 第3页:31 层:是鸡肋还是蛋糕? 第4页:Prescott 的杀手锏:改进的分支预测 第5页:调度程序和执行核心的改进 第6页:更大,但却更慢的Cache 第7页:新增13个指令 - SSE3 第8页:Prescott与现有几款核心的对比 第9页:测 试 环 境 第10页:整体性能测试部分 (一) 第11页:整体性能测试部分 (二) 第12页:整体性能测试部分 (三) 第13页:DirectX 9 性能测试 第14页:DirectX 8 性能测试 第15页:OpenGL 性能 第16页:DIVX 5.1.1 编码 和 3D 渲染性能 第17页:全 文 总 结
Prescott 的杀手锏:改进的分支预测
我们之前曾经说过:如果你想构建更长的管线或者增加更多的执行单元,你需要更强有力的分支预测。精确的分支预测,通过CPU的命中率,决定了完成任务所需要的操作数。Intel 把基本的整数管线增加了11层,因此它们需要相应地增加Prescott 分支预测的精确度,否则性能的损失将是无法避免的。
Intel 强调,Prescott 大部分的分支预测单元都没有改变,不过为了帮助平衡性能,作了一些关键的修改。
对于不熟识术语的人来说,分支预测究竟意味着什么,可能很难理解,其实CPU 分支预测充当的角色就是预报将要执行代码的路径。如果你了解一定的编程技术,那么可以明白分支预测能够预知条件声明语句(if-then,loops,etc...)的哪个部分将要执行。分支预测工作的原则非常简单;如果分支在过去曾经执行过一定的代码,很可能在将来也同样被执行。因此分支预测的目的是保持CPU将要执行代码的轨迹,并且用计算器统计特殊地址被执行的数目。假设有足够的空间储藏数据,那么一旦这些计算器累计了足够的数据,分支预测将能够以相当高的精确度预测那些分支将要被接纳。
提高分支预测性能的办法之一,也许你已经猜到了,那就是为已经执行/没有执行的分支提供足够的储存空间。AMD 在它的Opteron 处理器里面,也通过提高分支数据的储存空间来获得更精确的分支预测。Intel 的Prescott 没有选择相同的办法,Prescott 的分支目标缓冲仍旧是4K,Intel 也没有增加全局历史计数器的大小。Intel 的办法是,通过使用更少内核空间消费的方法来协调分支预测器的效率。
在程序代码中,循环是非常普遍的,而这对于数据结构的清零,打印字母或者作为大运算的一部分非常简单。在每次循环开始或者重复执行循环的时候,你需要判定是否继续执行该循环。幸运的是,这些类型的分支非常好预测,你通常会假设是否该分支满足你获得的结果(称为向后分支)。
不过并非所有向后分支都会被执行 - 它们并非所有都是循环的终点。在有些情况下,由于错误的结果,向后分支并非是分支循环的终点;但如果应用程序没有错误产生,那么该预测将不被执行。
代码 片段 A
Line 10: while (i < 10) do Line 11: A; Line 12: B; Line 13: increment i; Line 14: if i is still < 10, then go back to Line 11
代码片段 B
Line 10: A; Line 11: B; Line 12: C; ... Line 80: if (error) then go back to Line 11
Line 14 是循环的终点,也就是向后分支 - 应该被接受
Line 80 是向后分支 ,却不是循环的终点 - 不应该被接受
两种类型向后分支的例子
Prescott 包括了新的运算法则,能够从实际分支指令中,预测分支目标的距离,从而决定是否接受该分支。这些增强是相对于静态分支预测而言的,因为它们都有特定的情节。Prescott 还包括了对动态分支预测的改进。
典型的分支有两个选项:不接受该分支,或者去到目标指令开始执行那里的代码:
典型分支A
... Line 24: if (a = b) Line 25: execute this code; Line 26: otherwise Line 27: go to line 406;
不过还有第三类型的分支 - 叫做间接分支 - 把预测复杂化了一点。普通情况下,如果分支被接受,那么就会告诉CPU 应该怎么走,而间接分支则会告诉CPU,看看CPU 将要走向那里 - 分支指令的寄存器/主内存的地址。目前使用间接分支预测器的处理器,有Pentium M(Banias)和Prescott 。
间接分支
... Line 113: if (z < 2) Line 114: execute this code; Line 115: otherwise Line 116: go to memory location F and retreive the address of where to start executing ...
间接分支预测在很多情况下都可以获得很好的性能,不过也并非一概而论。Prescott 的分支预测器有特别的算法来处理这些情况,这些算法的细节并没有向公众公开。事实上,Prescott 团队借鉴了Pentium M 团队提高处理器效率的方法,后者是Intel 家族中最优秀的设计之一。
Prescott 的间接分支预测使得它在253.perlbmk SPEC CPU2000 测试中,有55%的性能增益。以下表格的是Prescott 与Northwood 相比错误分支预测减少的性能(越高越好)。
164.gzip
1.94%
175.vpr
8.33%
176.gcc
17.65%
181.mcf
9.63%
186.crafty
4.17%
197.parser
17.92%
252.eon
11.36%
253.perlbmk
54.84%
254.gap
27.27%
255.vortex
-12.50%
256.bzip2
5.88%
300.twolf
6.82%
Overall
12.78%
性能的增益似乎并不糟糕,因为Prescott 有55% 更长的管线。获得最大性能的地方(可以减少>10% 的错误分支预测),有176.gcc, 197.parser, 252.eon, 253.perlbmk 和 254.gap 。176.gcc 是一个编译器测试,不过Pentium 4 在该项测试的性能明显地落后于Athlon64 。197.parser 是一项字处理测试,由于整数代码的分歧,Pentium 4 在该测试的表现糟糕。252.eon 是光线描绘工具;改进254.gap 性能对于Prescott 在HPC 应用中意义重大,因为它模拟的是精深的分布式数据计算。
分支预测的改进,使得当前的软件无须重新编译或者封装,就能够获得更理想的性能。