本文包括三大部分:第一部分:浮點Q&A。第二部分:浮點運算與英特爾。第三部分:SPECfp_rate_base2006 性能指標(biāo)評測說明。
如果您對本文介紹的信息感興趣,或還有新的疑問及評論,都可以發(fā)郵件至:info@doit.com.cn 或者點擊這里加入論壇討論。前十位發(fā)送郵件的網(wǎng)友將會獲得由英特爾公司提供的小禮品。
第一部分:浮點運算Q&A
什么是浮點數(shù):
要了解什么是浮點數(shù),首先要了解什么是整數(shù)。數(shù)和計算通常是按“整數(shù)”或“浮點數(shù)”進(jìn)行劃分的。整數(shù)計算使用計算的所有位(如32位)記錄整數(shù)“值”。而浮點計算則使用計算的一部分位表示“值”(如23位),另一部分位表示指數(shù)(8位)。由于一部分位用來表示指數(shù),所以浮點計算得出的值可以比整數(shù)計算得出的值大很多或是小很多。換句話說,對于給定數(shù)量的位,浮點計算的精度沒有整數(shù)計算高,但浮點計算結(jié)果的范圍卻比整數(shù)計算大很多。
什么是浮點計算精度
采用浮點計算時,您可以確定記錄多少個數(shù)。例如,“π”的一個相當(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),總計需要51 * 3.32 = 169 位。這樣位數(shù)太多。您使用的位數(shù)越多,處理器計算的復(fù)雜程度就越高,也就需要更多的內(nèi)存來存儲值,計算所用的時間也就越長(和/或?qū)⑿枰嗟木w管來執(zhí)行更大的計算)。由于各計算所需精度不同,因此處理器為不同指令提供不同的精度,從而使編程人員可以確定他們所需的精度。精度級別可分為:單精度、雙精度和擴(kuò)展精度。
哪些處理器執(zhí)行單元用于浮點運算?
大多數(shù)人會認(rèn)為所有的浮點運算都通過處理器中的浮點單元完成。總體說來是這樣的,但不是所有的浮點單元都一樣,所有的浮點指令也不盡相同。同樣,許多人認(rèn)為所有的SIMD(單指令多數(shù)據(jù)流)指令都是由SIMD單元完成的。然而事實并非如此。有些SIMD指令執(zhí)行整數(shù)運算,而有些則執(zhí)行浮點運算。同樣,執(zhí)行浮點運算的SIMD指令使用的執(zhí)行單元與非SIMD浮點指令(如x87浮點指令)相同。
何謂不同的浮點指令集?
在增加MMX或SSE/SSE2/SSE3指令集之前,x86架構(gòu)中的所有浮點計算都被認(rèn)為是x87指令。這意味著他們使用特定的80 x87寄存器堆棧并且是80位擴(kuò)展精度計算。所有x87指令都有一個源和目標(biāo)操作數(shù)(例如單條指令,單個數(shù)據(jù))。
x87寄存器位于堆棧中,而非平面寄存器文件(flat register file)。這意味著,訪問x87寄存器要比下述XMM寄存器復(fù)雜一些。
采用MMX技術(shù)的英特爾®奔騰®處理器中增加了MMX指令。MMX是第一個增加到x86指令集中的SIMD指令。MMX指令是純整數(shù)運算;不過使用的是80位x87寄存器堆棧。
英特爾奔騰III處理器中增加了SSE指令集。SSE增加了支持單精度浮點運算能力的SIMD指令,它使用8個新的XMM128位寄存器(在64位模式中運算時,新的處理器中有16個XMM寄存器),它們被布置在一個平面寄存器文件中(這意味著可隨時訪問任何寄存器,并且不使用x87寄存器所用的堆棧協(xié)議)。增加的SIMD整數(shù)運算也是SSE指令集的一部分。x87寄存器無需執(zhí)行SSE浮點指令,但是執(zhí)行浮點運算的那些SSE指令仍使用x87指令所使用的浮點執(zhí)行單元(FP-add、FP-Mul和FP-Div)。這意味著您不能同時執(zhí)行SSE FP-Multiply和x87 FP-Multiply。
英特爾奔騰4處理器和英特爾至強(qiáng)處理器中增加了SSE2指令。SSE2增加了支持雙精度浮點運算能力的SIMD指令,它使用SSE指令所使用的128位XMM寄存器(增加的SIMD整數(shù)運算也是SSE2指令集的一部分)。許多新的SSE2指令與原來的MMX指令相似;但是新的SSE2指令能夠使用“更加易用”的XMM寄存器,而非“較難用”的x87寄存器堆棧。雙精度浮點SSE2指令繼續(xù)使用x87浮點執(zhí)行單元。
含超線程(HT)技術(shù)的英特爾奔騰4處理器和英特爾至強(qiáng)處理器(例如90納米Northwood和Prestonia)中增加了SSE3指令。SSE3指令只是增加了幾個SSE或SSE2指令集中所沒有的較為獨特的指令,但并未增加任何重要的新功能。
而在英特爾全線臺式機(jī)處理器酷睿、酷睿2處理器、移動平臺上的迅馳®處理器以及服務(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)可以在單時鐘周期內(nèi)執(zhí)行一條128位SSE, SSE2或SSE3指令。
下一代SSE4指令集將集成在2007年下半年發(fā)布的下一代45nm產(chǎn)品中,其中包括代號Nehalem的英特爾第二代酷睿®架構(gòu)。SSE4增加了50條性能增強(qiáng)指令。這些指令優(yōu)化矢量編譯、媒體、文本和字符串處理以及程序目標(biāo)加速。
CPU 微體系結(jié)構(gòu)對浮點運算的影響
以下是雙核英特爾至強(qiáng)5100處理器(Woodcrest)上其中一個內(nèi)核的微體系結(jié)構(gòu)圖表。您將注意到FP-Mul/FP-Div 和FP-Add 單元(在圖表中顯示為 Fadd 和 Fmul/Fdiv)處于不同的輸出端口(因此支持每時鐘周期發(fā)出和撤銷兩條浮點運算)。
Woodcrest 處理器微體系結(jié)構(gòu)
為了與上述進(jìn)行對比,下面列出了 AMD K8S 處理器微體系結(jié)構(gòu)(單核):
AMD K8S處理器微體系結(jié)構(gòu)
下表是對AMD當(dāng)前(K8S 雙核)和下一代處理器(Deerhound 四核)的浮點運算能力的總結(jié)。列出四核英特爾至強(qiáng)5300處理器(Clovertown,雙核)和雙核英特爾至強(qiáng)5100處理器(Woodcrest,四核)的值作為參考。值得注意的是,當(dāng)前Woodcrest的浮點運算能力大約是AMD Opteron的2倍。雖然將AMD在2007年第3季度推出“Deerhound”,但屆時,Clovertown仍會因其較高的內(nèi)核頻率繼續(xù)保持一定的領(lǐng)先優(yōu)勢。
| 最高持續(xù)浮點運算 | |||
| 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ù)浮點運算(英特爾對比AMD)
注:
1.K8S:4次單精度運算/指令×1條浮點指令/時鐘×2個內(nèi)核=8次浮點運算/時鐘
(×2.8GHz=22.4GFLOPS)
2.K8S:2次雙精度運算/指令×1條浮點指令/時鐘×2個內(nèi)核=4次浮點運算/時鐘
(×2.8GHz=11.2GFLOPS)
3.K8S:1次擴(kuò)展雙精度運算/指令×2條浮點指令/時鐘×2個內(nèi)核=4次浮點運算/時鐘
(×2.8GHz=11.2GFLOPS)
4.四核的值是英特爾和AMD都將時鐘速率相對雙核降低12.5%的預(yù)測結(jié)果。
(例如,英特爾為3.0×.875=2.625GHz;AMD為2.8×.875=2.45GHz)
綜述
盡管所有的浮點運算都在一個執(zhí)行單元內(nèi)運行,但是不同的指令用于執(zhí)行不同的運算精度。了解什么運算單元能運算什么指令會讓你明白具體每個處理器理論上的浮點運算能力(FLOPS)意味著什么。簡單的計算一個處理器有多少浮點運算單元并不能準(zhǔn)確的告訴你該處理器的浮點運算能力。你需要了解浮點運算單元的計算寬度,每個浮點運算單元能執(zhí)行的指令,每個指令運算的精度以及在一個時鐘指令內(nèi)每個指令能執(zhí)行的數(shù)量。
第二部分:浮點運算與英特爾
對于計算機(jī)而言,計算復(fù)雜程度越大,要求的內(nèi)存值也就越多,計算所用的時間也就越長,同時也需要更多的晶體管來支持計算。在上世紀(jì)九十年代前,這確實是一個難題,怎樣能讓計算機(jī)更輕松的處理越來越復(fù)雜的運算?直到一個人的出現(xiàn),難題迎刃而解了,他就是浮點計算的先驅(qū)??威廉?凱亨(William M.Kahan)。
計算機(jī)中的“數(shù)”有“定點數(shù)”和“浮點數(shù)”之分,“定點數(shù)”的運算部件的設(shè)計和實現(xiàn)比較容易,而“浮點數(shù)”的運算部件的設(shè)計和實現(xiàn)卻復(fù)雜得多,并且困難得多。 因此,較早的計算機(jī)許多都不配備浮點運算,而是采用IBM的巴科斯(J.Backus,1999年度圖靈獎獲得者)發(fā)明的軟件,由定點運算部件去完成浮點運算??蛇@種做法使浮點運算的速度大大降低,也就難以滿足某些應(yīng)用的需要了。
就是在這種情況下,威廉?凱亨,這位1933年6月出生在多倫多,曾經(jīng)供職于英特爾的人解決了這個問題。威廉?凱亨在完成中學(xué)學(xué)業(yè)以后,進(jìn)入著名的多倫多大學(xué)。在那里,他實現(xiàn)了“三級跳”??繼1954年取得數(shù)學(xué)學(xué)士學(xué)位以后,1956年和1958年又先后獲得碩士學(xué)位和博士學(xué)位。學(xué)成以后,凱亨在母校和加州大學(xué)伯克利分校從事過教學(xué)和研究工作。在英特爾供職期間,凱亨主持設(shè)計與開發(fā)了8087芯片,成功地實現(xiàn)了高速、高效的浮點運算部件。直到目前,以80×86為CPU的計算機(jī),若需完成科學(xué)與工程計算方面的課題,也必須同時配置8087這種數(shù)學(xué)協(xié)處理器。同時,一些著名的數(shù)學(xué)軟件包,如Mathematica,也必須在配有8087數(shù)學(xué)協(xié)處理器的機(jī)器上才能運行。由于他的突出貢獻(xiàn),凱亨后來又受命主持制定了二進(jìn)制的、與基數(shù)無關(guān)的浮點運算標(biāo)準(zhǔn),即IEEE754標(biāo)準(zhǔn)和IEEE854標(biāo)準(zhǔn)。而這兩個標(biāo)準(zhǔn)至今仍為絕大多數(shù)的計算機(jī)廠商所遵守。也正是由于這兩個標(biāo)準(zhǔn),ACM于1990年1月宣布凱亨因在浮點運算標(biāo)準(zhǔn)的制定上的貢獻(xiàn)而獲得圖靈獎。
嚴(yán)密、嚴(yán)謹(jǐn)、嚴(yán)格、追求更進(jìn)一步是威廉?凱亨的一貫作風(fēng),也是他留給英特爾在不斷研發(fā)新的計算機(jī)浮點運算技術(shù)道路上的一筆精神財富。英特爾與浮點運算有著不解之緣,不論是從創(chuàng)始還是到一路走來的發(fā)展,英特爾都在貢獻(xiàn)著自己最大的力量,相信在明天,英特爾依然會伴隨著浮點計算的不斷發(fā)展繼續(xù)前行。
第三部分:SPECfp_rate_base2006 性能指標(biāo)評測說明
SPECfp_rate_base2006是一項計算密集型性能指標(biāo)評測,用于衡量計算機(jī)系統(tǒng)在運行大量并行任務(wù)時的浮點吞吐性能。性能指標(biāo)評測包括從實際最終用戶應(yīng)用開發(fā)而來的一組十四個浮點工作負(fù)載。通過將性能指標(biāo)評測的拷貝數(shù)量設(shè)置成操作系統(tǒng)可識別的邏輯硬件內(nèi)核數(shù)量而同時運行多個性能指標(biāo)評測拷貝來測量系統(tǒng)吞吐率。報告的性能得分是按工作/小時測量的系統(tǒng)吞吐率的衡量標(biāo)準(zhǔn)。得分越高表示性能越好。
SPECfp2006:當(dāng)采用全面優(yōu)化的編譯程序進(jìn)行編譯時的17個標(biāo)配比率的幾何平均值。每一個比率代表一個浮點運算基準(zhǔn)測試。
SPECfp_base2006:當(dāng)基準(zhǔn)測試采用最低優(yōu)化的編譯程序進(jìn)行編譯時的17個標(biāo)配比率的幾何平均值。
SPECfp_rate2006:當(dāng)基準(zhǔn)測試采用全面優(yōu)化的編譯程序進(jìn)行編譯時的17個標(biāo)配吞吐率的幾何平均值。
SPECfp_rate_base2006:當(dāng)基準(zhǔn)測試采用最低優(yōu)化的編譯程序進(jìn)行編譯時的17個標(biāo)配吞吐率的幾何平均值。
如果您對本文介紹的信息感興趣,或還有新的疑問及評論,都可以發(fā)郵件至:info@doit.com.cn 或者點擊這里加入論壇討論。前十位發(fā)送郵件的網(wǎng)友將會獲得由英特爾公司提供的小禮品。