● 2、x68-64计算技术
从CPU能够处理的指令长度来划分,Athlon 64属于64位CPU,这彻底区别于所有的Athlon XP和Pentium 4处理器。K8能运行64位程序,正是得益于x86-64计算技术,而x86-64的精髓则是向下兼容。
我们在这里说的位数,也叫做字长。在信息技术领域,“字长”是衡量计算机性能的重要标准之一。字长在很大程度上决定着计算机的内存最大容量、文件的最大长度、数据在计算机内部的传输速度、处理速度和精度等性能指标。
(通用)寄存器是处理器内部在运算过程中暂时存放数据的存储单元,里面保存着那些正准备要处理的数据或者是已经处理过的数据。CPU的运算单元访问寄存器所用时间要比访问处理器缓存以及内存的时间都要短。我们知道CPU能不能运行一条长度最长为64位的指令,最终是由其寄存器位数决定的。而且位数不仅决定了处理能力,也制约着CPU在存储器中的寻址能力,32位CPU只能进行32位的内存寻址(2的32次方byte),也就是说CPU只能直接访问4GB(4千兆字节)的虚拟地址空间,但64位CPU理论上能够对2的64次方byte(1600亿亿字节,180亿GB)内存进行访问,可在今后相当长时间内完全满足计算需求。
好了,让我们回到Athlon 64的x86-64计算技术,看看AMD是怎样实现寄存器升级的。
x86-64寄存器的扩展方式如下:
AL范围表示0-7的8位寄存器,AH则表示16位寄存器,EAX就是我们大多数用户使用的32位寄存器,如Athlon XP和Pentium 4,RAX则是AMD拓展的64位寄存器。它能够存放一个64位长的数据,从而让CPU直接处理。从EAX到RAX的扩展,就同15年前Intel发布i386处理器时,将AX扩展为EAX的做法一样。当时i386在应用程序方面比起它的前辈i286来说,表现相当优秀。现在K8也采用了相同的做法,让该处理器可以很轻松的运行32位代码,在这种情况下CPU是没有满负荷运行的。
如下图要完成这些运算AMD为其引入了少量的新寄存器,作为现有寄存器的扩充:
与以往的32位X86结构相比,K8在原有的8个通用寄存器的基础上又增添了8个寄存器。这8个寄存器工作在64位下,经过64位编码的程序就可以使用到它们。AMD同时也将原有的EAX等寄存器扩展至64位的RAX。从扩充方式上看,EAX等寄存器可以看作是RAX的一个子集,系统仍旧可以完整地执行以往的32位编码程序。通用寄存器除了可高效的存储数据外,还可作为寻址时的地址指针,从而缩短指令长度和指令执行时间,加快CPU的运算处理速度,同时也给编程带来方便。单单从寄存器结构来看,X86-64较多的寄存器将会大幅度的提升处理器的性能,也会更加受到软件开发人员的喜爱。
下表则反应了Athlon 64的x86-64所用寄存器的具体区别:
现在新增加了R8-R15通用寄存器(GPR),这些寄存器都工作在64位模式下(这意味着在该模式下程序需要重新编译),原来的寄存器诸如EAX、EBX也由32位扩张至64位。Athlon 64在SSE单元中新加入了8个新寄存器以提供对SSE2的支持,寄存器数量的增加将直接带来性能的提升。
需要强调的是,通常所说的64位指令,并不是指指令的全长或操作码的长度为64位,而是指操作数所能达到的最大位数为64位。通过上面的图示,可以很好地理解64位指令和64位处理器的本质。
为了更好的在32/64位混合模式下工作,X86-64结构提供了多种处理器工作模式:
“长模式”下如果用户使用64位操作系统以及为64位计算编译的软件,那么就可以获得8个新增64位通用寄存器、扩展6 4位通用寄存器等众多新特性。“长模式”下还包含了一种“兼容模式”,在此模式下用户可以在64位操作系统上运行32位的应用程序,从应用程序的角度看,在“兼容模式”下其所使用的处理器也就是普通32位X86处理器。而从操作系统的角度来看,常规的地址变换,中断以及系统数据结构操作都是在64位“长模式”下进行的。
“传统模式”则是AMD的64位处理器为32位应用所提供的运行模式,这种模式下的X86-64结构处理器的运行与一般的32位处理器没有区别,可以完全兼容目前的32位操作系统以及32位应用程序。如果一颗Athlon 64运行在32位操作系统(和32位软件支持)下,它会自动在32位代码后补32个0,构成64位代码,轻松跨平台工作,实现无缝兼容,最大限度保护用户投资。按照AMD的说法,这个过程造成的性能损失在1%左右,“传统模式”下的Athlon 64其实就是一颗高性能的32位CPU。
在64位CPU问题上,Intel一直在尝试推广并将其在Itanium上使用的IA-64架构引入桌面级CPU,以达到64位应用的普及。但从上表我们可以看出这是很难实现的,IA-64要求软件代码完全重写才可以获得更高的性能,但这个代价是巨大的。当然Intel也预料到了这些问题,它在很早准备了一套B计划(Yamhill技术,这是一种具有64位扩展空间的32位芯片技术,完全类似于AMD的X86-64)。现在我们所使用的64位Intel处理器实际上都加入了Yamhill技术来获得对64位软件的支持。这也同时表示了Intel放弃IA-64架构,加入到AMD的X86-64阵营。Yamhill技术现在实际的应用名称为EM64T(Extended Memory 64 Technology,扩展64位内存技术)。
AMD与Intel的关系正在变得越来越“微妙”:一方面,相对Intel而言AMD是弱小的,难以对抗其在多方面的优势及成功。但另一方面,AMD又具有相当的实力,它的处理器足以与Intel产品在主流市场相抗衡,加之其发布的兼容X86的64位架构CPU,正如15年以前Intel在它的80386中所做的一样——同时兼容32位和16位程序,今天聪明的AMD也正在让它的64位处理器重复着当年Intel的成功。