技术新知:不同CPU架构如何影响浮点运算性能

作者: CBISMB编辑

责任编辑: 阚智

来源: 中小企业IT采购

时间: 2007-08-14 09:33

关键字: CPU架构,英特尔

浏览: 0

点赞: 0

收藏: 0

为了帮助广大网友更好的了解浮点运算,以及处理器结构与浮点运算之间的关系,我们服务器在线特别与英特尔公司合作发布了这篇文章,希望大家可以借此加深对浮点运算的相关知识了解。

     本文包括三大部分:第一部分:浮点Q&A。第二部分:浮点运算与英特尔。第三部分:SPECfp_rate_base2006 性能指标评测说明。

     如果您对本文介绍的信息感兴趣,或还有新的疑问及评论,都可以发邮件至:info@doit.com.cn 或者点击这里加入论坛讨论。前十位发送邮件的网友将会获得由英特尔公司提供的小礼品。

     第一部分:浮点运算Q&A

    什么是浮点数:
 
     要了解什么是浮点数,首先要了解什么是整数。数和计算通常是按“整数”或“浮点数”进行划分的。整数计算使用计算的所有位(如32位)记录整数“值”。而浮点计算则使用计算的一部分位表示“值”(如23位),另一部分位表示指数(8位)。由于一部分位用来表示指数,所以浮点计算得出的值可以比整数计算得出的值大很多或是小很多。换句话说,对于给定数量的位,浮点计算的精度没有整数计算高,但浮点计算结果的范围却比整数计算大很多。
 
     什么是浮点计算精度
 
     采用浮点计算时,您可以确定记录多少个数。例如,“π”的一个相当长的表示是 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510。问题是您想/需要记录 π 的几位数?您想让精确度达到多少?
 
     π的上述值是 51 位数。要将 51 位数表示成二进制数,每位数需要 3.32 位(Log (10)/Log(2) = 3.32),总计需要51 * 3.32 = 169 位。这样位数太多。您使用的位数越多,处理器计算的复杂程度就越高,也就需要更多的内存来存储值,计算所用的时间也就越长(和/或将需要更多的晶体管来执行更大的计算)。由于各计算所需精度不同,因此处理器为不同指令提供不同的精度,从而使编程人员可以确定他们所需的精度。精度级别可分为:单精度、双精度和扩展精度。
 
     哪些处理器执行单元用于浮点运算?
 
     大多数人会认为所有的浮点运算都通过处理器中的浮点单元完成。总体说来是这样的,但不是所有的浮点单元都一样,所有的浮点指令也不尽相同。同样,许多人认为所有的SIMD(单指令多数据流)指令都是由SIMD单元完成的。然而事实并非如此。有些SIMD指令执行整数运算,而有些则执行浮点运算。同样,执行浮点运算的SIMD指令使用的执行单元与非SIMD浮点指令(如x87浮点指令)相同。
 
     何谓不同的浮点指令集?
 
     在增加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条性能增强指令。这些指令优化矢量编译、媒体、文本和字符串处理以及程序目标加速。
©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。