X86-64分析(二):幸福在哪里,幸福在哪里
显然,K8体系不可能只是如我们上面所说的那样,仅仅简单地在64位环境下增加通用寄存器的宽度到64位。X86-64最吸引我们的部分应该在于对传统X86寄存器“体系”的变革上。
●寄存器体系的变革
我们都知道,X86指令集本身属于一种复杂指令集(CISC)。长期以来,使用X86指令集的处理器架构一直沿用寄存器结构。相比那些使用精简指令集(RISC)的处理器架构来说,由于程序可见的寄存器数量较少,因此造成传输延迟,性能以及流水线工作效率相对落后,从而给X86架构处理器的表现造成了影响。同时程序和编译器的优化难度也较大。
虽然近代的X86处理器中都增加了许多程序不可见的内部寄存器,并通过寄存器换名(Register Rename)技术变相地增大通用寄存器的数量,来弥补这一不足。然而这种措施由于只能通过处理器的硬件控制来实施,程序员无法根据需要来,灵活控制实际的寄存器使用状况,显然不如直接增加可见的通用寄存器来的有效。
而K8针对上述问题作出了改良。处理器在64位状态下工作时,增加了大量的程序员可见寄存器以供编程者使用,如下图:

可以说,这些额外增加的寄存器(我们姑且称之为“寄存器扩展“吧),才是真正能为桌面用户带来的好处之所在!
不过,尽管如此,我们也只能在K8的64位模式下,才能全部用到这些多出来的寄存器扩展资源(紫色部分的寄存器)。因为为了兼容以往的X86指令,K8所用的X86-64指令集将其所支持的指令分成了如下表所示的数个部分:

如上表所见,前面我们所说到的令人激动的寄存器扩展功能,并不是“即插即用“的。它需要我们将操作系统向64位转换,同时重新按64位的编程规范编译应用程序。在其它模式下,我们根本无法享受到这些好处。
尽管X86-64前途远大,不过古语云:天将降大任于斯人,必先……。以目前X86-64指令集64位扩展的各方面支持状况来说,情势不容乐观。
●操作系统的支持
从操作系统方面来看,目前除了部分版本的Linux率先支持X86-64位指令集64位扩展外,X86-64位指令集64位扩展真正走向主流所必不可缺的因素——Microsoft的视窗系列操作系统,相关的正式版却迟迟未能露面,仅在Athlon 64发布日匆匆推出了一款WinXP 64-bit beta版。
同时系统也仅配用了稍显老旧的Directx8.1,64位Directx9.0b则根本无法通过正常渠道获取。而通过上面摘自微软页面的说明,我们也可以看到WinXP 64-bit beta版的获取途径对于一款操作系统来说,也显得相当另类。这一切,多少令人感觉有点敷衍了事的意思。
●设备驱动的支持
从64位操作系统所必备的64位设备驱动程序来看,包括主板、显卡在内的许多重要设备的64位驱动程序也是犹抱琵琶半遮面,绝大多数设备厂商甚至在客服网页中也没有包含相关的下载文件,更不要提随盘附带64位驱动了。
在这方面,NVIDIA倒是率先提供了64bit版本的显示卡驱动程序,算是业内走在前列的厂商了。
●应用软件的支持
从64位最终的执行者——常用应用程序看,目前只有《UT2004》等极少数游戏宣称将推出64位版本的游戏。而更多的应用软件厂商则只是表示会支持,但多数都没有成品64位程序推出。
正是基于以上的原因,我们此次的评测,也没有添加64位的相关部分。
所有这一切,似乎映证着一句俗话:道路是曲折的,前途是光明的。