电脑的CPU都有不同的指令,那么应用程序是乍样完成兼容的?
电脑都有不同的指令,那么应用程序是怎么样完成不同的配置兼容工作的呢?虽然,现在都以函数来表示,但完成各种不同的操作都是由CPU的指令完成的,在这里面有着怎么样的规则呢?
解决方法
何谓不同的浮点指令集?
在增加MMX或SSE/SSE2/SSE3指令集之前,x86架构中的所有浮点计算都被认为是x87指令。这意味着他们使用特定的80 x87寄存器堆栈并且是80位扩展精度计算。所有x87指令都有一个源和目标操作数(例如单条指令,单个数据)。
x87寄存器位于堆栈中,而非平面寄存器文件(flat register file)。这意味着,访问x87寄存器要比下述XMM寄存器复杂一些。
采用MMX技术的英特尔?奔腾?处理器中增加了MMX指令。MMX是第一个增加到x86指令集中的SIMD指令。MMX指令是纯整数运算;不过使用的是80位x87寄存器堆栈。
英特尔奔腾III处理器中增加了SSE指令集。SSE增加了支持单精度浮点运算能力的SIMD指令,它使用8个新的XMM128位寄存器(在64位模式中运算时,新的处理器中有16个XMM寄存器),它们被布置在一个平面寄存器文件中(这意味着可随时访问任何寄存器,并且不使用x87寄存器所用的堆栈协议)。增加的SIMD整数运算也是SSE指令集的一部分。x87寄存器无需执行SSE浮点指令,但是执行浮点运算的那些SSE指令仍使用x87指令所使用的浮点执行单元(FP-add、FP-Mul和FP-Div)。这意味着您不能同时执行SSE FP-Multiply和x87 FP-Multiply。
英特尔奔腾4处理器和英特尔至强处理器中增加了SSE2指令。SSE2增加了支持双精度浮点运算能力的SIMD指令,它使用SSE指令所使用的128位XMM寄存器(增加的SIMD整数运算也是SSE2指令集的一部分)。许多新的SSE2指令与原来的MMX指令相似;但是新的SSE2指令能够使用“更加易用”的XMM寄存器,而非“较难用”的x87寄存器堆栈。双精度浮点SSE2指令继续使用x87浮点执行单元。
含超线程(HT)技术的英特尔奔腾4处理器和英特尔至强处理器(例如90纳米Northwood和Prestonia)中增加了SSE3指令。SSE3指令只是增加了几个SSE或SSE2指令集中所没有的较为独特的指令,但并未增加任何重要的新功能。
而在英特尔全线台式机处理器酷睿、酷睿2处理器、移动平台上的迅驰?处理器以及服务器上全新的英特尔至强处理器上采用的酷睿架构中,英特尔在原有的SSE3指令集的基础上新增了SSE优化,包括酷睿2处理器架构加速的SSE, SSE2和SSE3双操作(operations two-fold)。经过优化的架构可以在单时钟周期内执行一条128位SSE, SSE2或SSE3指令。
下一代SSE4指令集将集成在2007年下半年发布的下一代45nm产品中,其中包括代号Nehalem的英特尔第二代酷睿?架构。SSE4增加了50条性能增强指令。这些指令优化矢量编译、媒体、文本和字符串处理以及程序目标加速。
参考资料
http://www.cbismb.com/articlehtml/20073661.htm
bois完成