本文包括三大部分:第一部分:浮點(diǎn)Q&A。第二部分:浮點(diǎn)運(yùn)算與英特爾。第三部分:SPECfp_rate_base2006 性能指標(biāo)評(píng)測(cè)說明。


      如果您對(duì)本文介紹的信息感興趣,或還有新的疑問及評(píng)論,都可以發(fā)郵件至:info@doit.com.cn 或者點(diǎn)擊這里加入論壇討論。前十位發(fā)送郵件的網(wǎng)友將會(huì)獲得由英特爾公司提供的小禮品。


      第一部分:浮點(diǎn)運(yùn)算Q&A



      什么是浮點(diǎn)數(shù): 
  
      要了解什么是浮點(diǎn)數(shù),首先要了解什么是整數(shù)。數(shù)和計(jì)算通常是按“整數(shù)”或“浮點(diǎn)數(shù)”進(jìn)行劃分的。整數(shù)計(jì)算使用計(jì)算的所有位(如32位)記錄整數(shù)“值”。而浮點(diǎn)計(jì)算則使用計(jì)算的一部分位表示“值”(如23位),另一部分位表示指數(shù)(8位)。由于一部分位用來表示指數(shù),所以浮點(diǎn)計(jì)算得出的值可以比整數(shù)計(jì)算得出的值大很多或是小很多。換句話說,對(duì)于給定數(shù)量的位,浮點(diǎn)計(jì)算的精度沒有整數(shù)計(jì)算高,但浮點(diǎn)計(jì)算結(jié)果的范圍卻比整數(shù)計(jì)算大很多。 
  
      什么是浮點(diǎn)計(jì)算精度 
  
      采用浮點(diǎn)計(jì)算時(shí),您可以確定記錄多少個(gè)數(shù)。例如,“π”的一個(gè)相當(dāng)長的表示是 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510。問題是您想/需要記錄 π 的幾位數(shù)?您想讓精確度達(dá)到多少? 
  
      π的上述值是 51 位數(shù)。要將 51 位數(shù)表示成二進(jìn)制數(shù),每位數(shù)需要 3.32 位(Log (10)/Log(2) = 3.32),總計(jì)需要51 * 3.32 = 169 位。這樣位數(shù)太多。您使用的位數(shù)越多,處理器計(jì)算的復(fù)雜程度就越高,也就需要更多的內(nèi)存來存儲(chǔ)值,計(jì)算所用的時(shí)間也就越長(和/或?qū)⑿枰嗟木w管來執(zhí)行更大的計(jì)算)。由于各計(jì)算所需精度不同,因此處理器為不同指令提供不同的精度,從而使編程人員可以確定他們所需的精度。精度級(jí)別可分為:單精度、雙精度和擴(kuò)展精度。 
  
      哪些處理器執(zhí)行單元用于浮點(diǎn)運(yùn)算? 
  
      大多數(shù)人會(huì)認(rèn)為所有的浮點(diǎn)運(yùn)算都通過處理器中的浮點(diǎn)單元完成??傮w說來是這樣的,但不是所有的浮點(diǎn)單元都一樣,所有的浮點(diǎn)指令也不盡相同。同樣,許多人認(rèn)為所有的SIMD(單指令多數(shù)據(jù)流)指令都是由SIMD單元完成的。然而事實(shí)并非如此。有些SIMD指令執(zhí)行整數(shù)運(yùn)算,而有些則執(zhí)行浮點(diǎn)運(yùn)算。同樣,執(zhí)行浮點(diǎn)運(yùn)算的SIMD指令使用的執(zhí)行單元與非SIMD浮點(diǎn)指令(如x87浮點(diǎn)指令)相同。 
  
      何謂不同的浮點(diǎn)指令集? 
  
      在增加MMX或SSE/SSE2/SSE3指令集之前,x86架構(gòu)中的所有浮點(diǎn)計(jì)算都被認(rèn)為是x87指令。這意味著他們使用特定的80 x87寄存器堆棧并且是80位擴(kuò)展精度計(jì)算。所有x87指令都有一個(gè)源和目標(biāo)操作數(shù)(例如單條指令,單個(gè)數(shù)據(jù))。 
  
      x87寄存器位于堆棧中,而非平面寄存器文件(flat register file)。這意味著,訪問x87寄存器要比下述XMM寄存器復(fù)雜一些。 
  
      采用MMX技術(shù)的英特爾®奔騰®處理器中增加了MMX指令。MMX是第一個(gè)增加到x86指令集中的SIMD指令。MMX指令是純整數(shù)運(yùn)算;不過使用的是80位x87寄存器堆棧。 
  
      英特爾奔騰III處理器中增加了SSE指令集。SSE增加了支持單精度浮點(diǎn)運(yùn)算能力的SIMD指令,它使用8個(gè)新的XMM128位寄存器(在64位模式中運(yùn)算時(shí),新的處理器中有16個(gè)XMM寄存器),它們被布置在一個(gè)平面寄存器文件中(這意味著可隨時(shí)訪問任何寄存器,并且不使用x87寄存器所用的堆棧協(xié)議)。增加的SIMD整數(shù)運(yùn)算也是SSE指令集的一部分。x87寄存器無需執(zhí)行SSE浮點(diǎn)指令,但是執(zhí)行浮點(diǎn)運(yùn)算的那些SSE指令仍使用x87指令所使用的浮點(diǎn)執(zhí)行單元(FP-add、FP-Mul和FP-Div)。這意味著您不能同時(shí)執(zhí)行SSE FP-Multiply和x87 FP-Multiply。 
  
      英特爾奔騰4處理器和英特爾至強(qiáng)處理器中增加了SSE2指令。SSE2增加了支持雙精度浮點(diǎn)運(yùn)算能力的SIMD指令,它使用SSE指令所使用的128位XMM寄存器(增加的SIMD整數(shù)運(yùn)算也是SSE2指令集的一部分)。許多新的SSE2指令與原來的MMX指令相似;但是新的SSE2指令能夠使用“更加易用”的XMM寄存器,而非“較難用”的x87寄存器堆棧。雙精度浮點(diǎn)SSE2指令繼續(xù)使用x87浮點(diǎn)執(zhí)行單元。 
  
      含超線程(HT)技術(shù)的英特爾奔騰4處理器和英特爾至強(qiáng)處理器(例如90納米Northwood和Prestonia)中增加了SSE3指令。SSE3指令只是增加了幾個(gè)SSE或SSE2指令集中所沒有的較為獨(dú)特的指令,但并未增加任何重要的新功能。 
  
      而在英特爾全線臺(tái)式機(jī)處理器酷睿、酷睿2處理器、移動(dòng)平臺(tái)上的迅馳®處理器以及服務(wù)器上全新的英特爾至強(qiáng)處理器上采用的酷睿架構(gòu)中,英特爾在原有的SSE3指令集的基礎(chǔ)上新增了SSE優(yōu)化,包括酷睿2處理器架構(gòu)加速的SSE, SSE2和SSE3雙操作(operations two-fold)。經(jīng)過優(yōu)化的架構(gòu)可以在單時(shí)鐘周期內(nèi)執(zhí)行一條128位SSE, SSE2或SSE3指令。 
  
      下一代SSE4指令集將集成在2007年下半年發(fā)布的下一代45nm產(chǎn)品中,其中包括代號(hào)Nehalem的英特爾第二代酷睿®架構(gòu)。SSE4增加了50條性能增強(qiáng)指令。這些指令優(yōu)化矢量編譯、媒體、文本和字符串處理以及程序目標(biāo)加速。 
  
      CPU 微體系結(jié)構(gòu)對(duì)浮點(diǎn)運(yùn)算的影響


      以下是雙核英特爾至強(qiáng)5100處理器(Woodcrest)上其中一個(gè)內(nèi)核的微體系結(jié)構(gòu)圖表。您將注意到FP-Mul/FP-Div 和FP-Add 單元(在圖表中顯示為 Fadd 和 Fmul/Fdiv)處于不同的輸出端口(因此支持每時(shí)鐘周期發(fā)出和撤銷兩條浮點(diǎn)運(yùn)算)。



Woodcrest 處理器微體系結(jié)構(gòu)


      為了與上述進(jìn)行對(duì)比,下面列出了 AMD K8S 處理器微體系結(jié)構(gòu)(單核):



AMD K8S處理器微體系結(jié)構(gòu)


      下表是對(duì)AMD當(dāng)前(K8S 雙核)和下一代處理器(Deerhound 四核)的浮點(diǎn)運(yùn)算能力的總結(jié)。列出四核英特爾至強(qiáng)5300處理器(Clovertown,雙核)和雙核英特爾至強(qiáng)5100處理器(Woodcrest,四核)的值作為參考。值得注意的是,當(dāng)前Woodcrest的浮點(diǎn)運(yùn)算能力大約是AMD Opteron的2倍。雖然將AMD在2007年第3季度推出“Deerhound”,但屆時(shí),Clovertown仍會(huì)因其較高的內(nèi)核頻率繼續(xù)保持一定的領(lǐng)先優(yōu)勢(shì)。


































 


最高持續(xù)浮點(diǎn)運(yùn)算


 


AMD


英特爾


 


K8S
雙核


Deerhound
四核


Woodcrest
雙核


Clovertown
四核


單精度


22.4 GFLOPS


78.4 GFLOPS


48 GFLOPS


84 GFLOPS


雙精度


11.2 GFLOPS


39.2 GFLOPS


24 GFLOPS


42 GFLOPS


擴(kuò)展雙精度


11.2 GFLOPS


19.6 GFLOPS


12 GFLOPS


21 GFLOPS


單插槽最高持續(xù)浮點(diǎn)運(yùn)算(英特爾對(duì)比AMD)


      注: 
            1.K8S:4次單精度運(yùn)算/指令×1條浮點(diǎn)指令/時(shí)鐘×2個(gè)內(nèi)核=8次浮點(diǎn)運(yùn)算/時(shí)鐘 
            (×2.8GHz=22.4GFLOPS) 
            2.K8S:2次雙精度運(yùn)算/指令×1條浮點(diǎn)指令/時(shí)鐘×2個(gè)內(nèi)核=4次浮點(diǎn)運(yùn)算/時(shí)鐘 
            (×2.8GHz=11.2GFLOPS) 
            3.K8S:1次擴(kuò)展雙精度運(yùn)算/指令×2條浮點(diǎn)指令/時(shí)鐘×2個(gè)內(nèi)核=4次浮點(diǎn)運(yùn)算/時(shí)鐘 
            (×2.8GHz=11.2GFLOPS) 
            4.四核的值是英特爾和AMD都將時(shí)鐘速率相對(duì)雙核降低12.5%的預(yù)測(cè)結(jié)果。 
            (例如,英特爾為3.0×.875=2.625GHz;AMD為2.8×.875=2.45GHz)


      綜述


      盡管所有的浮點(diǎn)運(yùn)算都在一個(gè)執(zhí)行單元內(nèi)運(yùn)行,但是不同的指令用于執(zhí)行不同的運(yùn)算精度。了解什么運(yùn)算單元能運(yùn)算什么指令會(huì)讓你明白具體每個(gè)處理器理論上的浮點(diǎn)運(yùn)算能力(FLOPS)意味著什么。簡單的計(jì)算一個(gè)處理器有多少浮點(diǎn)運(yùn)算單元并不能準(zhǔn)確的告訴你該處理器的浮點(diǎn)運(yùn)算能力。你需要了解浮點(diǎn)運(yùn)算單元的計(jì)算寬度,每個(gè)浮點(diǎn)運(yùn)算單元能執(zhí)行的指令,每個(gè)指令運(yùn)算的精度以及在一個(gè)時(shí)鐘指令內(nèi)每個(gè)指令能執(zhí)行的數(shù)量。


 


      第二部分:浮點(diǎn)運(yùn)算與英特爾



      對(duì)于計(jì)算機(jī)而言,計(jì)算復(fù)雜程度越大,要求的內(nèi)存值也就越多,計(jì)算所用的時(shí)間也就越長,同時(shí)也需要更多的晶體管來支持計(jì)算。在上世紀(jì)九十年代前,這確實(shí)是一個(gè)難題,怎樣能讓計(jì)算機(jī)更輕松的處理越來越復(fù)雜的運(yùn)算?直到一個(gè)人的出現(xiàn),難題迎刃而解了,他就是浮點(diǎn)計(jì)算的先驅(qū)??威廉?凱亨(William M.Kahan)。


      計(jì)算機(jī)中的“數(shù)”有“定點(diǎn)數(shù)”和“浮點(diǎn)數(shù)”之分,“定點(diǎn)數(shù)”的運(yùn)算部件的設(shè)計(jì)和實(shí)現(xiàn)比較容易,而“浮點(diǎn)數(shù)”的運(yùn)算部件的設(shè)計(jì)和實(shí)現(xiàn)卻復(fù)雜得多,并且困難得多。 因此,較早的計(jì)算機(jī)許多都不配備浮點(diǎn)運(yùn)算,而是采用IBM的巴科斯(J.Backus,1999年度圖靈獎(jiǎng)獲得者)發(fā)明的軟件,由定點(diǎn)運(yùn)算部件去完成浮點(diǎn)運(yùn)算??蛇@種做法使浮點(diǎn)運(yùn)算的速度大大降低,也就難以滿足某些應(yīng)用的需要了。


      就是在這種情況下,威廉?凱亨,這位1933年6月出生在多倫多,曾經(jīng)供職于英特爾的人解決了這個(gè)問題。威廉?凱亨在完成中學(xué)學(xué)業(yè)以后,進(jìn)入著名的多倫多大學(xué)。在那里,他實(shí)現(xiàn)了“三級(jí)跳”??繼1954年取得數(shù)學(xué)學(xué)士學(xué)位以后,1956年和1958年又先后獲得碩士學(xué)位和博士學(xué)位。學(xué)成以后,凱亨在母校和加州大學(xué)伯克利分校從事過教學(xué)和研究工作。在英特爾供職期間,凱亨主持設(shè)計(jì)與開發(fā)了8087芯片,成功地實(shí)現(xiàn)了高速、高效的浮點(diǎn)運(yùn)算部件。直到目前,以80×86為CPU的計(jì)算機(jī),若需完成科學(xué)與工程計(jì)算方面的課題,也必須同時(shí)配置8087這種數(shù)學(xué)協(xié)處理器。同時(shí),一些著名的數(shù)學(xué)軟件包,如Mathematica,也必須在配有8087數(shù)學(xué)協(xié)處理器的機(jī)器上才能運(yùn)行。由于他的突出貢獻(xiàn),凱亨后來又受命主持制定了二進(jìn)制的、與基數(shù)無關(guān)的浮點(diǎn)運(yùn)算標(biāo)準(zhǔn),即IEEE754標(biāo)準(zhǔn)和IEEE854標(biāo)準(zhǔn)。而這兩個(gè)標(biāo)準(zhǔn)至今仍為絕大多數(shù)的計(jì)算機(jī)廠商所遵守。也正是由于這兩個(gè)標(biāo)準(zhǔn),ACM于1990年1月宣布凱亨因在浮點(diǎn)運(yùn)算標(biāo)準(zhǔn)的制定上的貢獻(xiàn)而獲得圖靈獎(jiǎng)。


      嚴(yán)密、嚴(yán)謹(jǐn)、嚴(yán)格、追求更進(jìn)一步是威廉?凱亨的一貫作風(fēng),也是他留給英特爾在不斷研發(fā)新的計(jì)算機(jī)浮點(diǎn)運(yùn)算技術(shù)道路上的一筆精神財(cái)富。英特爾與浮點(diǎn)運(yùn)算有著不解之緣,不論是從創(chuàng)始還是到一路走來的發(fā)展,英特爾都在貢獻(xiàn)著自己最大的力量,相信在明天,英特爾依然會(huì)伴隨著浮點(diǎn)計(jì)算的不斷發(fā)展繼續(xù)前行。


 


      第三部分:SPECfp_rate_base2006 性能指標(biāo)評(píng)測(cè)說明




      SPECfp_rate_base2006是一項(xiàng)計(jì)算密集型性能指標(biāo)評(píng)測(cè),用于衡量計(jì)算機(jī)系統(tǒng)在運(yùn)行大量并行任務(wù)時(shí)的浮點(diǎn)吞吐性能。性能指標(biāo)評(píng)測(cè)包括從實(shí)際最終用戶應(yīng)用開發(fā)而來的一組十四個(gè)浮點(diǎn)工作負(fù)載。通過將性能指標(biāo)評(píng)測(cè)的拷貝數(shù)量設(shè)置成操作系統(tǒng)可識(shí)別的邏輯硬件內(nèi)核數(shù)量而同時(shí)運(yùn)行多個(gè)性能指標(biāo)評(píng)測(cè)拷貝來測(cè)量系統(tǒng)吞吐率。報(bào)告的性能得分是按工作/小時(shí)測(cè)量的系統(tǒng)吞吐率的衡量標(biāo)準(zhǔn)。得分越高表示性能越好。


            SPECfp2006:當(dāng)采用全面優(yōu)化的編譯程序進(jìn)行編譯時(shí)的17個(gè)標(biāo)配比率的幾何平均值。每一個(gè)比率代表一個(gè)浮點(diǎn)運(yùn)算基準(zhǔn)測(cè)試。 
            SPECfp_base2006:當(dāng)基準(zhǔn)測(cè)試采用最低優(yōu)化的編譯程序進(jìn)行編譯時(shí)的17個(gè)標(biāo)配比率的幾何平均值。 
            SPECfp_rate2006:當(dāng)基準(zhǔn)測(cè)試采用全面優(yōu)化的編譯程序進(jìn)行編譯時(shí)的17個(gè)標(biāo)配吞吐率的幾何平均值。 
            SPECfp_rate_base2006:當(dāng)基準(zhǔn)測(cè)試采用最低優(yōu)化的編譯程序進(jìn)行編譯時(shí)的17個(gè)標(biāo)配吞吐率的幾何平均值。


      如果您對(duì)本文介紹的信息感興趣,或還有新的疑問及評(píng)論,都可以發(fā)郵件至:info@doit.com.cn 或者點(diǎn)擊這里加入論壇討論。前十位發(fā)送郵件的網(wǎng)友將會(huì)獲得由英特爾公司提供的小禮品。

分享到

多易

相關(guān)推薦