感谢yhqian的报道:
英特尔已经开始采用兼容AMD公司的“AMD64”的指令集架构.此架构就是英特尔于2004年2月发布的x86指令64位扩展规格——“Intel 64-Bit Extension Technology(英特尔64位扩展技术)”.此扩展规格与AMD 64位指令集架构和寄存器结构基本相同.区别仅在于作为自主CPU应用技术的虚拟双CPU架构和负责电源管理的扩展指令.内含详细技术资料英特尔已经开始采用兼容AMD公司的“AMD64”的指令集架构。此架构就是英特尔于2004年2月发布的x86指令64位扩展规格——“Intel 64-Bit Extension Technology(英特尔64位扩展技术)”。此扩展规格与AMD 64位指令集架构和寄存器结构基本相同。区别仅在于作为自主CPU应用技术的虚拟双CPU架构和负责电源管理的扩展指令。
在2004年2月于美国旧金山举办的“2004年英特尔春季开发商论坛(IDF 2004)”主题演讲中,贝瑞特表示将在服务器和工作站CPU中采用64位扩展规格。
记忆码和指令代码均相同。大体上讲,在基本指令中没有发现什么区别。
在64位模式下运行时,原来的通用寄存器均被扩展成64位。64位通用寄存器和SSE寄存器均各自增加了8个。
基于只有奔腾IV系列CPU才具备的虚拟双CPU结构的“超线程技术(Hyper-Threading Technology)”和“SSE3”的程序,与基于只有Athlon 64系列CPU才具备的SIMD指令集“3DNow!”的程序存在兼容性问题。
EFER寄存器是用来控制和监视扩展功能状态的。用于控制64位模式切换的“LME”位的定义,AMD64和Intel 64-Bit Extension Technology完全相同。在Intel 64-Bit Extension Technology中,启用高速寄存器内容保存和恢复功能的“FFXSR”位及“NXE”位被定义成了保留位。
2004年2月18日,英特尔公布了x86指令64位扩展规格——“Intel 64-Bit Extension Technology(英特尔64位扩展技术)”(以下简称64位扩展)。在2004年2月于美国旧金山举办的“2004年英特尔春季开发商论坛”主题演讲中,英特尔宣布将在服务器和工作站所用的“至强”处理器中采用64位扩展规格。其重点则在于与AMD推出的“Opteron”及“Athlon 64”系列64位CPU采用的指令架构“AMD64”的兼容性上。英特尔没有谈到AMD64与64位扩展之间的兼容性。只是在面向开发商的资料中称“不使用超线程和SSE3,基本上也能运行”。不过,从业已公开的资料中可以看出英特尔已经向ADM靠拢。
基本指令完全相同
首先,让我们来看一看决定兼容性基本框架的CPU工作模式的结构。作为64位运行模式,AMD64称之为“Long mode(长模式)”,64位扩展则称之为“IA-32e mode”。尽管名称不同,不过各模式的寻址大小、操作数长度和通用寄存器长度则完全相同。另外还有2点也是相同的,一是64位模式包括不需重新编译即可运行现有32位应用程序的“Compatibility(兼容)”模式,二是作为“Legacy”模式提供了原x86架构CPU所具有的32位模式。
从在兼容性上最为关键的指令集架构和寄存器结构来看,AMD64和64位扩展也没有太大的区别。首先在指令集方面,64位扩展包括了几个过去只有AMD CPU才具备的指令。比如,AMD自主开发的高速系统调用指令“SYSCALL/SYSRET”就被追加到了64位扩展中。虽说两种架构并没有完全一一对应上,不过,从基本指令(AMD称之为“General-Purpose Instruction”和“System Instruction”,英特尔称之为“Instruction”的范围内的指令)上来说,无论是机械语言的“指令代码”,还是将机械语言转换成人可以理解的简称的“记忆码”,可以说英特尔和AMD都完全相同(见画面,点击放大)。
其次是寄存器结构。应用程序使用的通用寄存器和SSE寄存器结构,在64位扩展和AMD64中没有任何区别。原来均为8个的32位通用寄存器在64位模式下均被扩展至64位。另外,64位通用寄存器和SSE指令所用的XMM寄存器均各自增加了8个。
自主功能的控制指令存在区别
不过,仔细分析还是发现了一些有可能会在应用程序兼容性上产生问题的区别。首先来讲,AMD和英特尔专为控制各自开发的自主功能而设计的扩展指令是不同的(见表2,点击放大)。比如面向奔腾IV具有的虚拟双CPU结构——“超线程技术”的指令,在不具有虚拟双CPU结构的Athlon 64系列中就没有。反过来,只有Athlon 64系列才具有的SIMD指令“3Dnow!”就没有被包含在64位扩展中。如果是以这些指令为运行条件的话,兼容性就会出现问题。在扩展功能方面,几乎所有的应用程序在起动时都会通过读取CPUID寄存器,来改变所使用的程序。因此在实用上没有任何问题。
此外,运行过程不同的指令则包括将浮点寄存器内容向内存中保存,或者从内存中恢复的“FXSAVE”和“FXSTORE”指令。FXSAVE/FXSTORE指令是指在执行多任务的情况下先暂时将寄存器内容保存到内存中,然后读入其他程序,重新执行原来的程序时则从内存中恢复寄存器内容。此时寄存器内部的数据越多,向内存转移数据的时间就越长,开销也就越大。AMD64中提供了一个名叫“Fast-FXSAVE/FXSTORE”的指令,不使用SSE指令时通过将XMM0~15寄存器排除在保存和恢复对象之外提高运行速度。SSE指令是用于处理单精度浮点运算的指令集。在需要双精度浮点运算的科学技术运算中不需要使用XMM0~15寄存器。此时通过打开EFER寄存器的第14位,FXSAVE/FXSTORE指令就会切换成Fast模式。64位扩展中,EFER寄存器的第14位则是保留位。
EFER寄存器还有一个AMD64有、而64位扩展中未定义的位。这就是“NXE”位,此位的作用是控制用来进行内存页访问控制的“NX(No Execute,禁止执行)”位的开关。
增加了可配置的物理内存
除CPU特有的功能外,由于两种架构相互兼容,因此正在推进AMD64架构支持的OS开发商就能用一种OS支持两种CPU。微软定于2004年下半年供货的“Windows XP 64bit Edition”和“Windows Server 2003 Service Pack1”将支持64位扩展。Linux方面,美国红帽也将于同年第2季度推出“Red Hat Enterprise Linux 3 update 2”。美国Novell公司将于同年第2季度和第3季度分别推出“SUSE LINUX 9.1”和“SUSE LINUX Enterprise Server 9”。
作为采用64位架构的好处,英特尔和微软同时突出强调的是过去最大为4GB的物理寻址空间扩展到了40位,即1TB。鉴于此就必须提高内存模块集成片数的上限。
因而在2005年就将把过去主要面向服务器提供的“Registered-DIMM”扩展成“FB-DIMM(Fully Buffered-DIMM)”。作为Registered-DIMM,由于在内存模块中内置寄存器芯片,因此通过修正时钟信号和地址信号,就能使内存稳定地工作。而FB-DIMM则包含每个内存芯片的信号线,全部信号都要经过名为“高级内存缓冲器(AMB)”的控制芯片。由此就能连接每通道最大8片的FB-DIMM。与内存控制器之间的接口是基于PCI Express的串行接口。由AMB芯片将内存芯片的并行信号转换成串行信号。不过,接口转换时的迟延需要相应的开销。