走入64位运算的世界

硬件周刊

  在今年的春季IDF论坛上,Intel宣布将发布采用IA32E技术的处理器,该处理器在Intel原有的IA32架构上进行了扩展,增加了64位计算模式,支持64位的虚拟寻址空间,同时兼顾64位和32位运算程序。很明显,该处理器采用了与AMD Athlon 64类似的技术。在64位桌面CPU的初步较量中,AMD似乎占了一点小小的上风。尽管Intel对这款产品的发布相当低调,但IA32E的出现无疑会加速64位桌面CPU的普及!

  64位 VS 32位:优势何在

  位宽对处理器性能的影响绝不亚于主频。位宽是指微处理器一次执行指令的数据带宽。处理器的寻址位宽增长很快,业界已使用过4、8、16位寻址再到目前主流的32位,而64位寻址浮点运算将成为未来CPU发展趋势。

  受虚拟和实际内存尺寸的限制,目前主流的32位处理器在性能执行模式方面存在一个严重的缺陷:当面临大量的数据流时,32位的寄存器(注:为了处理数据,暂时储存结果,或者做间接寻址等等动作,每个处理器都具备一些内建的内存,这些能够在不延迟的状态下存取的内存就称为“寄存器”,每个寄存器的大小都相同)和指令集不能及时进行相应的处理运算。32位处理器一次只能处理32位,也就是4个字节的数据;而64位处理器一次就能处理64位(即8个字节)的数据。如果我们将总长128位的指令分别按照16位、32位、64位为单位进行编辑的话:旧的16位处理器(如Intel 80286 CPU)需要8个指令,32位的处理器需要4个指令,而64位处理器则只要两个指令。显然,在工作频率相同的情况下,64位处理器的处理速度比16位、32位的更快。

  大家比较一下图1中的32位与64位处理器,64位的代码流的数量没有改变,其宽度随着指令代码的宽度而变化;而数据流的宽度则增加了一倍。虽然理论上在一个时钟周期内64位系统处理的数据量是32位系统的两倍,但理论和现实通常都是有差距的。要注意的是,处理器不只需要位宽够宽的寄存器,也需要足够数量的寄存器,以确保大量数据处理。因此为了容纳更多的数据,寄存器和内部数据通道也必须加倍──在64位处理器中的寄存器位数是32位处理器中的两倍。

  不过,虽然寄存器位数增加了,但正在执行指令的指令寄存器却都是一样的,即数据流加倍而指令流不变。此外,增加数据位数还可以扩大动态范围。在通常使用的十进制中,我们只能得到最多10个整数(一位数情况下),这是因为0~9中只有10个不同的符号来表示相应的意思,想要表示10以上的数就需要增加一位数,两位数(00-99)才可以表示100个数。我们可以得出十进制的动态范围的计算公式:DR=10n (n表示数字位数)。在二进制体系中,相应的我们可以得到公式:DR=2n,那么目前使用的32位就可以达到232=4.3×109,升级到64位之后,就可以达到264=1.8×1019。动态范围扩大了43亿倍。

  提示:扩大动态范围可以在一定程度上提高寄存器中数据的准确性。比如,当使用32位系统处理气象模拟运算任务时,当处理的数据超过32位所能提供的最大动态范围时,系统就会出现诸如Overflow(超过了最大正整数)或Underflow(低于最小的负整数)的错误提示,这样寄存器中的数据就无法保证准确。

  除了运算能力之外,与32位处理器相比,64位处理器的优势还体现在系统对内存的控制上。由于地址使用的是特殊的整数,而64位处理器的一个ALU(算术逻辑运算器)和寄存器可以处理更大的整数,也就是更大的地址。传统32位处理器的寻址空间最大为4GB,使得很多需要大容量内存的大规模的数据处理程序在这时都会显得捉襟见肘,形成了运行效率的瓶颈。而64位的处理器在理论上则可以达到1800万个TB(1TB=1024GB),将能够彻底解决32位计算系统所遇到的瓶颈现象。当然64位寻址空间也有一定的缺点:内存地址值随着位数的增加而变为原来的两倍,这样内存地址将在缓存中占用更多的空间,其他有用的数据就无法载入缓存,从而引起了整体性能的下降。

  提示:其实目前32位系统已有的内存寻址空间已经打破了4GB的限制,如Intel可以使用32位系统来管理512GB内存,不过这一般是采用超常规的寻址技术(软模拟方式)来实现的,在一定程度上会大大降低系统性能。

  道不同,不相为谋:IA-64 VS x86-64

  处理器厂商早已经意识到传统的32位处理器的设计已经严重制约处理器的性能向更高方向发展,因此,作为处理器两巨头的Intel、AMD推出了自家的64位架构。然而,在今年IDF大会之前,在64位处理器发展道路之上,AMD与Intel选择了两条截然相反的道路!

  1.Intel IA-64 架构

  根据处理器寻址位宽支持的不同,作为PC领导者的英特尔采用泾渭分明的策略:针对32位桌面市场采用了x86兼容架构──IA-32;而针对64位服务器市场采用IA-64架构。这两种架构的指令集是无法兼容的,即IA-64处理器缺乏对x86的向下兼容能力,这使得IA-64处理器不能同时运行两代应用程序。

  提示:IA是“Intel Architecture”的简称。以前Intel Architecture 又称x86架构,因为它的第一代处理器的代号是8086,而其后继产品依序以8088、80186、80188、80286……为代号,均为80x86的形式,因此被称为x86架构。但在 i486之后,Intel开始改用“Intel Architecture”为其处理器架构命名,如32位处理器的架构,称为IA-32架构,64位处理器的,则称为IA-64架构。

  IA-64架构体系最大一个特点是内存寻址能力大大增加了。但作为一个64位处理器架构,并不仅仅在于更大的内存寻址空间。众所周知,为了达到更高的性能,处理器不仅需要更快地执行指令,而且还要在每个周期中同时执行更多的指令,即通常所说的“并行执行”。但传统IA-32系统架构通过对处理器并行的排序密码来向处理器传递并行命令,处理器的性能往往不能充分发挥。为了让IA-64变得更加高效,Intel引入了EPIC指令的概念。EPIC能让处理器更高效地执行并行指令。并且除了能让芯片内并行执行几条指令外,还具有和其他芯片相连构成并行处理环境的能力。在寄存器方面,IA-64能够提供128个整数/多媒体寄存器,128个82位浮点寄存器,64个SIMD寄存器和8个分支寄存器,这些巨大数量的寄存器让Intel整合了寄存器引擎的动力,大大增强多任务应用的表现。

  基于IA-64架构的是Itanium系列处理器(图2)。不过,由于IA-64架构的限制,最先的Itanium处理器是无法兼容IA-32指令集,使得服务器用户颇有怨言。为此,英特尔后来在IA-64架构中引入了更完善的指令集(Bundled Instructions)技术、配备了64位指令编译器(x86向IA-64的转换,当Itanium执行32位代码时,其内部的IA-32处理模块将采用软件模拟的方式直接执行IA-32二进制代码,并对它进行动态程序优化,实现无缝链接)来兼容IA-32位指令集。但IA-64的64位编译器的效率并不是很高,同时这也不是运行x86代码的最佳方式,从而造成IA-64处理器如Itanium2处理器在运行x86程序时效率相当低下。

  2.AMD x86-64架构

  在64位处理器上,AMD采用与Intel截然不同的策略:AMD采用一种基于x86指令体系的64位架构,也就是x86-64架构。采用类似于从80286升级到80386的平滑升级方式:一方面可以增加寻址位宽,另一方面又具备向下兼容,这样可以让64位处理器运行在32位应用环境下。

  由于x86-64是从传统x86架构变革而来的,这意味着x86-64架构如果要同时兼顾64位、32位运算任务,就必须对原x86寄存器体系进行变革。传统的x86指令集本身属于一种复杂指令集(CISC),使用x86指令集的处理器架构一直沿用寄存器结构,由于程序可用的寄存器数量较少(注:传统的x86架构只拥有8个通用寄存器、8个浮点寄存器和8个SIMD寄存器,而Intel的IA-64架构的寄存器要多得多),因此造成传输延迟,性能以及流水线工作效率相对落后,从而给x86架构处理器的性能造成了影响,程序和编译器的优化难度也较大。针对这个问题,在x86-64架构中,AMD在x86架构基础上将通用寄存器和SIMD寄存器的数量增加了1倍:其中新增了8个通用寄存器以及8个SIMD寄存器作为原有x86处理器寄存器的扩充(图3)。

  这些通用寄存器都工作在64位模式下,经过64位编码的程序就可以使用到它们(这些64位寄存器称为RAX、RBX、RCX、RDX、RDI、RSI、RBP、RSP、RIP以及EFLAGS,在32位环境下并不完全使用到这些寄存器),同时AMD也将原有的EAX等寄存器扩展至64位的RAX,这样可以增强通用寄存器对字节的操作能力。从扩充方式上看,EAX等寄存器可以看作是RAX的一个子集,系统仍然可以完整地执行以往的32位编码程序。增加通用寄存器除了可高效存储数据外,还可作为寻址时的地址指针,从而缩短指令长度和指令执行时间,加快CPU的运算处理速度,同时也给编程带来方便。而且在纯64位模式中,x86-64体系还支持数据地址关联模式,并且直接对应64位的RIP(指令指针)。原始的x86体系仅仅在控制传输指令中支持RIP关联地址,而64位模式的RIP关联地址改进了该项特性,扩大了它的应用范围。

  与此同时,为了同时支持32位和64位代码及寄存器,x86-64架构允许处理器工作在以下两种模式:Long Mode(长模式)和Legacy Mode(传统模式),Long模式又分为两种子模式:64位模式和Compatibility Mo

  de兼容模式(图4),它们之间的区别见表1。

  与Intel的IA-64架构相比,x86-64结构最大的优势就是完全兼容现存的x86代码,不管是32位还是更老的16位,x86-64结构通过模式之间的嵌套实现这种特性,做到了无缝兼容,充分地利用了现有的资源。

  此外,从理论上说,x86-64也支持64位内存寻址空间,可以达到1800万个TB(1TB=1024GB)。但实际上,x86-64架构的虚拟寻址空间为48位,也就是大概可以获得282TB的寻址空间。此外x86-64的物理寻址空间为40位,也就是说可以控制大约1TB的物理内存。

  注:其实在64位处理器领域,还存在一个RISC架构,如SUN、IBM的64位处理器都是基于这个架构。鉴于大家对此类产品很少接触到,所以在这里就不介绍了。

  结语

  从目前情况来看,64位处理器取代32位处理器已经是大势所趋。但从目前桌面平台对64位指令集及64位扩展的各方面支持状况来说,情势不容乐观。目前针对桌面平台的64位操作系统、64位驱动程序、64位应用软件可以说是寥寥无几。以操作系统来说,目前除了部分版本的Linux率先支持x86-64位指令集外,x86-64位指令集真正走向主流所必不可少的因素──Microsoft的Windows XP 64位操作系统却迟迟未能正式推出……可以说64位应用平台要真正走入我们的生活还需要很长时间,至少今年是不可能实现的。