虽然现在来看有点老。不过有些东西对想了解处理器的新人来说,看看也是有益的。
信息来源:天极
Intel最新一代的64位IA-64 Itanium微处理机(原开发代号Merced)历时7年艰苦开发,终于有望今年推出。Itanium微处理机(中文名为安腾)是由Intel和HP共同开发的Intel IA-64系列中的第一个64位微处理机产品(时钟频率800Mhz)。根据开发计划2001年中将推出代号McKinley(时钟频率 1.2Mhz),2003年将陆续推出代号Deerfield 和Madison的后续产品。IA-64是Intel的64位微处理机的指令集架构ISA的名字,Itanium 是依据这个微架构设计、对IA-64特定硬件实现的CPU。
EPIC设计理念
Intel的64位微处理机主要设计目标是克服当今微处理机系统架构的瓶颈。Intel认为:系统架构真正的内在的瓶颈来自对并行性的障碍,需要开发一个全新的系统架构,最大程度地开发指令级的并行ILP。由此Intel提出了与CISC和RISC完全不同的创新的设计理念,这就是EPIC(显式指令并行计算-Explicity Parallel Instruction Computing)。
EPIC设计理念的中心思想是:让智能化的软件指挥愚蠢的硬件,复杂性交给软件处理,硬件只需按序高速并行处理指令和数据。并行性的表达由每条指令开始,并行性的抽取、调度由编译器实现,从源头起开发指令级的并行ILP。无论何时、无论何处只要可能就利用并行能力,如果不可能就使它成为可能。
Intel重新定义了分支预测的概念。与分支预测猜测要执行那一条分支完全不同的是,EPIC的IA-64同时执行两条分支,分支中每条指令都有标志位。利用指令、编译器和CPU硬件的有机结合,把条件分支组合成判定。从而将控制相关转化为数据相关,避免了分支,消除了误预测损失,显著提高了性能。
用推测装入(speculative loading)减少存储器时延
尽管现代超标量微处理机使用多级Cache结构提高了给CPU供应指令和数据的速度,但由于Cache未命中最终需访问存储器的时延仍造成CPU闲置,机器越宽,每个周期可处理的指令和数据越多,存储器时延的影响就越严重,因此成为现代微处理机架构的瓶颈。
在存储器时延中,Load操作是个大问题,使并行调度指令很费劲。举一个例子:

假定是个4宽度机器(每个周期执行4条指令),则Load和其它三条指令都在1个时钟周期内并行执行,最后一条指令B+A在下一周期执行。由于B+A指令需要Load装入的数据(与Load操作相关),麻烦的是在执行B+A之前需要等待Load操作完成,如果Load需要3个时钟周期,则指令流水线将闲置2个周期,这就浪费了执行槽,降低了处理效率。
EPIC使用推测装入技术解决这类问题,通过先行装入所需的数据,减少存储器时延的影响。需要解决的是在装入了数据和需要使用数据其间数据发生变化的问题,以免数据无效(称为异常)。EPIC的解决是先推测装入数据(load.s),在目的寄存器中存入异常标识,使用数据时执行推测检验指令(chk.s)检测load.s的异常,如数据无效则进行异常处理。因此允许尽早地调度推测装入,通过推测检验保证数据的有效性。据Intel称,由于消除了分支障碍,平均有50%的Load操作可用推测装入完成。
IA-64 Itanium微处理机的架构特征
Itianium 微处理机支持IA-64和IA-32两种操作系统环境,IA-64操作系统环境中支持IA-32的保护模式和实模式,IA-64和IA-32两种不同的指令集可通过指令和中断进行转换,有利于用户32位应用向64位应用迁移。
IA-64架构具有高持久性能的特征,消除了进一步提高性能的障碍。IA-64架构设计的主要原则是:
1. 显式并行
*编译器与CPU间的合成机制
*利用指令级并行ILP的大量资源
*128个64位通用寄存器GR,128个82位的浮点FR,64个1位判定寄存器P。8个64位的分支寄存器BR
*支持多个执行单元和存储器口
2. 增强指令级并行ILP的特点
*推测(使存储器时延影响最小)
*判定(消除分支)
*低开销的循环软件流水线
*分支预测(使分支代价最低)
3. 集中于改进软件性能的增强
*对软件模块化的特别支持
*高性能浮点架构
*特有的多媒体指令
4. 指令级并行ILP
指令级并行指同时执行多条指令的能力。IA-64架构允许以包(bundels)的形式(每个包有3条指令)发射不相关的、可并行执行的指令,每个时钟周期可发射多个包(Itanium微处理机应是2个包,即每时钟周期发射6条指令。其后续产品McKinley应能发射更多的包)。由于具有大量并行资源的支持,如大寄存器文件和多个执行单元,IA-64允许编译器管理进程和同时发生的线程计算工作。
IA-64结合了利用ILP能力的机制。用于传统微处理机架构的编译器常常受限于它们利用推测信息的能力,因为无法保证其总是正确的。IA-64架构允许编译器发掘推测信息,而不以牺牲应用的正确执行为代价。传统微处理机架构中,由于过程调用需要寄存器流出和注入而影响性能。IA-64允许过程把寄存器的使用情况通知给CPU,这就允许CPU 调度过程的寄存器操作,即使存在低级别ILP时也是如此。
5. 编译器与CPU的通讯
IA-64提供了如指令模版(template),分支暗示和Cache暗示等机制,允许编译器将编译时的信息通知CPU。另外,IA-64允许已编译的代码利用运行时的信息管理CPU硬件。这种通讯机制对把由于分支和Cache未命中造成的性能损失降至最小是不可缺少的。
IA-64中每次存储器装入和存储都有一个2位的Cache暗示场,编译器用它对要访问的存储器区域的空间和时间位置进行判定编码。IA-64利用这个信息确定Cache行在Cache层次中的位置。
6. 推测
有两种类型的推测:控制推测和数据推测。对这两种推测,编译器通过提早发出一个操作,将该操作的时延移出临界路径。只要推测确实合理是有益的,编译器将会发出一个推测性操作。这里有益的两个条件是:经频繁统计推测操作需要恢复的的可能性必须足够小,提早发出的推测操作应能进一步展示ILP增强优化。推测是编译器通过重叠操作统计性发掘ILP的一种主要机制,因而提高了操作时延的容忍度。
7. 判定
判定是指令的条件执行。在传统微处理机架构中,条件分支是通过条件执行实现的,,而IA-64是通过使用判定指令实现这个功能。判定移除了条件执行所用的分支,结果是有更大的基本代码块可供优化处理,同时消除了与误预测相关的损失。
通过比较指令给判定寄存器赋值,使用判定标志决定是否执行指令和更新状态,将控制相关转化为数据相关,避免了分支,简化了编译器的优化处理。如果判定值为真,执行和更新状态,否则视为空操作,象nop指令。
8. 寄存器堆栈引擎RSE
IA-64通过编译器控制的重命名接口避免了过程调用和返回时不必要的寄存器流出和注入。在调用现场,新的寄存器帧可用于被调用过程(不管是调用者还是被调用者),不需要寄存器流出和注入。通过重命名指令中的虚拟寄存器标识符,经一个基值寄存器,访问物理寄存器。被调用者可自由使用可用的寄存器,不必流出和最终恢复调用者寄存器。
9. 分支
除通过判定移除分支外,IA-64还提供其它几种机制降低分支误预测率和剩余误预测分支的代价。这些机制有关分支条件的信息给编译器通知CPU如何处理分支提供了手段。
提供的预测指令用于早发出目标地址和分支位置的指示,编译器椐此判断分支是适用动态预测还是静态预测,CPU可椐此初始化分支预测结构,使良好的预测成为可能,即使是第一次遇到分支。分支指令对于无条件分支和编译器可能已掌握的分支特性信息的情况都是有益的。
对于间接分支,使用分支目标寄存器BR保存目标地址,分支预测指令可早提供哪个寄存器将用于目标地址计算寄存器的指示。分支预测指令还能发出间接分支是一个过程返回的信号,使有效利用调用/返回堆栈预测结构成为可能。
10. 寄存器循环
循环的modulo调度类似硬件的流水线的功能单元,由于下次重复在上次重复完成之前开始,重复被分成类似执行流水线的级,Modulo调度允许编译器执行并行的循环重复,而非顺序执行。传统上多个重复的并发执行需要循环展开(unrolling)和软件重命名寄存器,IA-64允许重命名寄存器给每次重复提供它自己的一组寄存器,避免了unrolling,这种寄存器重命名称为寄存器循环。由此软件流水线可应用于更宽范围的各种循环,显著减少了循环开销。
11. 浮点架构
IA-64定义了一种支持IEEE全集的浮点架构,除单精度,双精度和扩充双精度数据类型外,还作了某些扩充,如融合(fused)乘/加操作,最小和最大函数,以及比扩充双精度存储器格式更大范围的寄存器文件格式。定义了128个浮点寄存器FR,其中有96个寄存器是循环的(非堆栈型),可用于简洁的循环modulo调度。提供多个浮点状态寄存器用于推测。
IA-64提供并行FP指令,可并行和不相关的对两个32位单精度数操作,结果放入一个浮点寄存器中。这些指令显著增加了单精度浮点数的计算吞吐量,增强了3D密集应用和游戏的性能。
12. 多媒体支持
IA-64提供多媒体指令,可把通用寄存器处理为八个8位。四个16位或两个32位元素,这些指令可并行地、互不相关地操作各个元素,有利地支持向量运算。IA-64的多媒体指令与MMX指令和SSE指令是语义兼容的。
IA-64系统架构特征包括支持MAS(多地址空间模型)操作系统和SAS(单地址空间模型)操作系统,系统性能和伸展性,系统安全和支持性等方面。
通过前面介绍,相信大家对Intel公司创新的EPIC(显式指令并行计算)设计理念,编译器与CPU、指令集的完美配合,最大程度开发指令级并行ILP的实现策略有了基本的理解。下面我们给出Intel公司关于EPIC设计理念的图,或许有助于我们理解Intel公司是如何对当代微处理机技术定位和预测未来发展方向的。

Intel公司认为:随着时间迁移,技术的进步,应用的发展,要实现高性能微处理机已不是传统复杂指令集CISC、精简指令集RISC,以及现代OOO/SuperScalar(乱序执行/超标量)架构所能胜任的。应该在设计理念上有所突破—经软件与硬件合成获取最高性能,应该在最基本的层次上实现高性能—指令级并行ILP,应该有大量的硬件资源用于并行执行,应该用高性能的EPIC构件满足伸展性的要求,这就是Intel公司显式并行EPIC的设计理念和对未来高性能微处理机的解决方案。
毫无疑问,Intel公司创新的EPIC设计理念,符合软件智能化的长远方向。在保证x86应用兼容性的基础上,全新的指令集架构ISA,全新的微架构实现,全新的IA-64 Itanium微处理机能否带来全新的性能?这是我们期待的,也是需要市场和应用检验的。