本文包括三大部分:第一部分:浮點(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ì)獲得由英特爾公司提供的小禮品。