? ? ? ?學(xué)了IT那么久肚医,只知道CPU主頻不斷的提升仓手,核數(shù)也越來(lái)越多,但是如何理論上計(jì)算出不同代CPU性能的提升业踢,還真沒(méi)有認(rèn)真思考過(guò)栗柒,我估計(jì)大多數(shù)人也不會(huì)關(guān)注,這次由于要進(jìn)行高性能集群項(xiàng)目遇到知举,剛好認(rèn)真的研究了一下CPU的浮點(diǎn)計(jì)算理論值瞬沦。記錄一下過(guò)程太伊。
首先,F(xiàn)LOAS=核數(shù)*單核主頻*CPU單個(gè)周期浮點(diǎn)計(jì)算值逛钻。
上述三個(gè)參數(shù)中僚焦,核數(shù),單核主頻在CPU型號(hào)都會(huì)標(biāo)明绣的,只有CPU單個(gè)周期浮點(diǎn)計(jì)算值這個(gè)要深入思考一下叠赐。
首先要了解CPU指令集的概念。
現(xiàn)在服務(wù)器的CPU都是AVX-512指令集了屡江,
對(duì)應(yīng)CPU能處理什么樣的指令集芭概,可以查intel官方的Specifications.比如我想查Intel? Xeon? Gold 6142 Processor這款CPU的支持哪種指令,可以查如下鏈結(jié)https://ark.intel.com/products/120487/Intel-Xeon-Gold-6142-Processor-22M-Cache-2-60-GHz-
同時(shí)還能查到此款CPU的AVX-512 FMA Units是2惩嘉,這個(gè)意思是可以單個(gè)CPU周期可以同時(shí)執(zhí)行2條512bit 加法和2條512bit 乘法罢洲。
其次是理解單精度和雙精度浮點(diǎn)運(yùn)算概念,簡(jiǎn)單的理解單精度就是指32bit的指令長(zhǎng)度的運(yùn)算文黎,對(duì)應(yīng)操作系統(tǒng)就是32位操作系統(tǒng)惹苗;雙精度就是指64bit指令長(zhǎng)度的運(yùn)算,對(duì)應(yīng)操作系統(tǒng)就是64位操作系統(tǒng)耸峭。
理解上述二個(gè)概念桩蓉,我們就可以算出CPU單周期浮點(diǎn)計(jì)算能力了,
CPU單周期雙精度浮點(diǎn)計(jì)算能力=2(FMA數(shù)量)*2(同時(shí)加法和乘法)*512/64
CPU單周期雙精度浮點(diǎn)計(jì)算能力=2(FMA數(shù)量)*2(同時(shí)加法和乘法)*512/32
可以理解為單個(gè)CPU周期能夠同時(shí)執(zhí)行加法和乘法的指令的條數(shù)劳闹。
例如上述的Intel 6142 CPU的浮點(diǎn)能力可以計(jì)算出院究,6142是16核,每核2.6GHz
FLOAS(雙精度)=16*2.6*(2*2*512/64)=1331.2GFLOAs
FLOAS(單精度)=16*2.6*(2*2*512/32)=2662.4GFLOAs
可以理解此款CPU的雙精度浮點(diǎn)運(yùn)算峰值為1.3TFLOAs,單精度為2.6TFLOAs.
對(duì)一個(gè)計(jì)算節(jié)點(diǎn)本涕,有可能有多個(gè)CPU业汰,那么對(duì)于計(jì)算節(jié)點(diǎn),單個(gè)CPU浮點(diǎn)運(yùn)算峰值要乘以CPU個(gè)數(shù)才是一個(gè)計(jì)算節(jié)點(diǎn)的浮點(diǎn)運(yùn)算峰值菩颖。
常用的CPU情況:
Intel Core 2 and Nehalem:
4 DP FLOPs/cycle: 2-wide SSE2 addition + 2-wide SSE2 multiplication
8 SP FLOPs/cycle: 4-wide SSE addition + 4-wide SSE multiplication
Intel Sandy Bridge/Ivy Bridge:
8 DP FLOPs/cycle: 4-wide AVX addition + 4-wide AVX multiplication
16 SP FLOPs/cycle: 8-wide AVX addition + 8-wide AVX multiplication
Intel Haswell/Broadwell/Skylake/Kaby Lake:
16 DP FLOPs/cycle: two 4-wide FMA (fused multiply-add) instructions
32 SP FLOPs/cycle: two 8-wide FMA (fused multiply-add) instructions
AMD K10:
4 DP FLOPs/cycle: 2-wide SSE2 addition + 2-wide SSE2 multiplication
8 SP FLOPs/cycle: 4-wide SSE addition + 4-wide SSE multiplication
AMD Bulldozer/Piledriver/Steamroller/Excavator, per module (two cores):
8 DP FLOPs/cycle: 4-wide FMA
16 SP FLOPs/cycle: 8-wide FMA
AMD Ryzen
8 DP FLOPs/cycle: 4-wide FMA
16 SP FLOPs/cycle: 8-wide FMA
Intel Atom (Bonnell/45nm, Saltwell/32nm, Silvermont/22nm):
1.5 DP FLOPs/cycle: scalar SSE2 addition + scalar SSE2 multiplication every other cycle
6 SP FLOPs/cycle: 4-wide SSE addition + 4-wide SSE multiplication every other cycle
AMD Bobcat:
1.5 DP FLOPs/cycle: scalar SSE2 addition + scalar SSE2 multiplication every other cycle
4 SP FLOPs/cycle: 4-wide SSE addition every other cycle + 4-wide SSE multiplication every other cycle
AMD Jaguar:
3 DP FLOPs/cycle: 4-wide AVX addition every other cycle + 4-wide AVX multiplication in four cycles
8 SP FLOPs/cycle: 8-wide AVX addition every other cycle + 8-wide AVX multiplication every other cycle
ARM Cortex-A9:
1.5 DP FLOPs/cycle: scalar addition + scalar multiplication every other cycle
4 SP FLOPs/cycle: 4-wide NEON addition every other cycle + 4-wide NEON multiplication every other cycle
ARM Cortex-A15:
2 DP FLOPs/cycle: scalar FMA or scalar multiply-add
8 SP FLOPs/cycle: 4-wide NEONv2 FMA or 4-wide NEON multiply-add
Qualcomm Krait:
2 DP FLOPs/cycle: scalar FMA or scalar multiply-add
8 SP FLOPs/cycle: 4-wide NEONv2 FMA or 4-wide NEON multiply-add
IBM PowerPC A2 (Blue Gene/Q), per core:
8 DP FLOPs/cycle: 4-wide QPX FMA every cycle
SP elements are extended to DP and processed on the same units
IBM PowerPC A2 (Blue Gene/Q), per thread:
4 DP FLOPs/cycle: 4-wide QPX FMA every other cycle
SP elements are extended to DP and processed on the same units
Intel Xeon Phi (Knights Corner), per core:
16 DP FLOPs/cycle: 8-wide FMA every cycle
32 SP FLOPs/cycle: 16-wide FMA every cycle
Intel Xeon Phi (Knights Corner), per thread:
8 DP FLOPs/cycle: 8-wide FMA every other cycle
16 SP FLOPs/cycle: 16-wide FMA every other cycle
Intel Xeon Phi (Knights Landing), per core:
32 DP FLOPs/cycle: two 8-wide FMA every cycle
64 SP FLOPs/cycle: two 16-wide FMA every cycle
參考文章:
http://bbs.keinsci.com/thread-786-1-1.html
https://stackoverflow.com/questions/15655835/flops-per-cycle-for-sandy-bridge-and-haswell-sse2-avx-avx2
https://ark.intel.com/products/120487/Intel-Xeon-Gold-6142-Processor-22M-Cache-2-60-GHz-
https://baike.baidu.com/item/%E6%8C%87%E4%BB%A4%E9%9B%86/238130?fromtitle=CPU%E6%8C%87%E4%BB%A4%E9%9B%86&fromid=3728424&fr=aladdin
我是受第一個(gè)鏈結(jié)的文章啟發(fā)的样漆,怕以后找不到,我拷貝過(guò)來(lái)晦闰。
簡(jiǎn)談CPU峰值性能怎么計(jì)算
文/Sobereva @北京科音2015-Feb-13
CPU峰值性能就是CPU運(yùn)算能力滿打滿算最最理想情況下的性能放祟,這只有理論意義,實(shí)際性能要以軟件實(shí)測(cè)為準(zhǔn)呻右。有人問(wèn)寡人峰值性能怎么算舞竿,這里就很簡(jiǎn)單地說(shuō)兩句。搞計(jì)算化學(xué)的一般只關(guān)注浮點(diǎn)性能窿冯,所以這里只提峰值浮點(diǎn)性能骗奖。
峰值浮點(diǎn)性能=CPU核數(shù)*CPU頻率*每周期執(zhí)行的浮點(diǎn)操作數(shù)
時(shí)下普通的CPU的單精度(SP)浮點(diǎn)性能是雙精度(DP)浮點(diǎn)性能的兩倍。目前常見(jiàn)的幾類CPU內(nèi)核的每周期浮點(diǎn)操作數(shù)以及細(xì)節(jié)如下(引自網(wǎng)絡(luò),見(jiàn)http://stackoverflow.com/questions/15655835/flops-per-cycle-for-sandy-bridge-and-haswell-sse2-avx-avx2)
Intel Core 2 and Nehalem:
4 DP FLOPs/cycle: 2-wide SSE2 addition + 2-wide SSE2 multiplication?
8 SP FLOPs/cycle: 4-wide SSE addition + 4-wide SSE multiplication?
Intel Sandy Bridge/Ivy Bridge:
8 DP FLOPs/cycle: 4-wide AVX addition + 4-wide AVX multiplication?
16 SP FLOPs/cycle: 8-wide AVX addition + 8-wide AVX multiplication?
Intel Haswell:
16 DP FLOPs/cycle: two 4-wide FMA (fused multiply-add) instructions?
32 SP FLOPs/cycle: two 8-wide FMA (fused multiply-add) instructions?
AMD K10:
4 DP FLOPs/cycle: 2-wide SSE2 addition + 2-wide SSE2 multiplication?
8 SP FLOPs/cycle: 4-wide SSE addition + 4-wide SSE multiplication?
AMD Bulldozer/Piledriver/Steamroller, per module (two cores):
8 DP FLOPs/cycle: 4-wide FMA?
16 SP FLOPs/cycle: 8-wide FMA?
時(shí)下搞計(jì)算化學(xué)的人最常用的XEON E3/E5中执桌,v3對(duì)應(yīng)Haswell鄙皇,v2對(duì)應(yīng)Ivy Bridge,不帶后綴的對(duì)應(yīng)Sandy Bridge仰挣。更老的伴逸,比如XEON 5500系列對(duì)應(yīng)Nehalem。如果不清楚膘壶,建議查閱筆者編纂的《硬件資料庫(kù)》(http://pan.baidu.com/s/1hq7PLeG)
根據(jù)這些資料错蝴,可以容易地計(jì)算峰值浮點(diǎn)性能,比如E5-2690 v2颓芭,基本頻率為3.0GHz(這里不考慮Turbo boost動(dòng)態(tài)升頻)顷锰,有10個(gè)核,每個(gè)核每周期可以做8次雙精度浮點(diǎn)運(yùn)算或16次單精度浮點(diǎn)運(yùn)算亡问,因此:
單精度峰值浮點(diǎn)性能=3.0*10*16=480 GFLOPs
雙精度峰值浮點(diǎn)性能=3.0*10*8=240 GFLOPs
這里FLOPs (FLoating-point Operations Per Second)是衡量浮點(diǎn)性能的常用單位官紫,即每秒做的浮點(diǎn)運(yùn)算次數(shù)。1GFLOPs代表每秒十億次浮點(diǎn)運(yùn)算州藕。目前世界頂尖的高性能計(jì)算機(jī)(HPC)的浮點(diǎn)性能都以PFLOPs來(lái)計(jì)束世,1P=1000T=1000000G。
從上面列的數(shù)據(jù)中看似XEON v3 (Haswell)比v2的浮點(diǎn)性能高一倍床玻,這被一些商家用來(lái)忽悠消費(fèi)者毁涉。實(shí)際上,同頻同核下锈死,v3比v2性能提升很小贫堰。如果v3價(jià)格只比v2貴一點(diǎn),那么可以買v3馅精,但如果貴得很多,切勿被表面上看多一倍的峰值性能所沖昏了頭腦粱檀。適當(dāng)了解下不同內(nèi)核以及指令集的特點(diǎn)對(duì)理解這個(gè)問(wèn)題是有益的洲敢。為了方便,這里我們只考慮雙精度浮點(diǎn)茄蚯。
第一代奔騰支持的MMX压彭、奔3開(kāi)始支持的SSE(最后發(fā)展到SSE4/4A),以及從Sandy Bridge開(kāi)始支持的AVX等等都是SIMD(單指令多數(shù)據(jù))指令集渗常,它允許一個(gè)指令同時(shí)對(duì)多個(gè)數(shù)據(jù)進(jìn)行處理以達(dá)到很大的吞吐量壮不。Sandy Bridge/Ivy Bridge支持的AVX指令集可以一次處理256bit浮點(diǎn)指令,雙精度浮點(diǎn)數(shù)長(zhǎng)度為64bit皱碘,即通過(guò)AVX指令一次可以做四個(gè)雙精度浮點(diǎn)運(yùn)算询一。如前面給出的信息所示,Sandy Bridge/Ivy Bridge一個(gè)周期可以執(zhí)行一次AVX浮點(diǎn)乘和一次AVX浮點(diǎn)加,也就是說(shuō)一個(gè)周期可以做四個(gè)雙精度浮點(diǎn)加和四個(gè)雙精度浮點(diǎn)乘健蕊,故曰每周期可以做8個(gè)雙精度浮點(diǎn)運(yùn)算菱阵。這只是理論最大值,實(shí)際上水分很大缩功,因?yàn)榍疤崾潜仨毸幚淼耐耆茿VX 256bit指令晴及,但實(shí)際中是做不到的,能利用上AVX指令集的只是實(shí)際計(jì)算程序中的某些部分而已(這需要編譯器和操作系統(tǒng)的支持嫡锌。如果寫的時(shí)候?qū)锳VX來(lái)調(diào)整代碼編寫方式可以更好地利用AVX來(lái)達(dá)到更好的性能)虑稼。另外,不可能總是恰好要算的是一條加法指令和一條乘法指令势木,比如傳來(lái)的只有一串浮點(diǎn)加指令蛛倦,那么乘法運(yùn)算單元就空閑了,浮點(diǎn)性能也就浪費(fèi)了一半跟压。所以胰蝠,雖然我們從前面列的數(shù)據(jù)中看到Sandy Bridge/Ivy Bridge得益于AVX而比Nehalem每周期能做的浮點(diǎn)運(yùn)算次數(shù)高一倍,但這只是最理想的狀況而已震蒋,而且這和實(shí)際表現(xiàn)出來(lái)的性能不是那么的密切茸塞。一般應(yīng)用中前者比后者在同頻同核數(shù)情況下性能高近一半,這主要還是因?yàn)镃PU架構(gòu)做了多方面改進(jìn)帶來(lái)的查剖,具體說(shuō)起來(lái)就比較復(fù)雜了钾虐,這里就不提了∷褡可以說(shuō)效扫,如果所運(yùn)行的程序?qū)VX優(yōu)化較好,Sandy Bridge/Ivy Bridge表現(xiàn)的性能比Nehalem提升得會(huì)更多直砂。
再來(lái)看XEON v3和v2的關(guān)系菌仁。Haswell相比Sandy Bridge/Ivy Bridge的一個(gè)主要改進(jìn)是支持了AVX 2.0指令集,相比AVX有了一些改進(jìn)静暂,其中很關(guān)鍵的是支持了FMA3指令济丘,這里FMA是Fused Multiply-Add(融合乘加)的縮寫,F(xiàn)MA3是一種具體實(shí)現(xiàn)洽蛀。原本摹迷,做result=a+(b*c)需要先做一次乘法再做一次加法,而利用FMA指令可以在一個(gè)周期內(nèi)做完這個(gè)運(yùn)算郊供,所以可以認(rèn)為做一次FMA運(yùn)算等于做兩次常規(guī)浮點(diǎn)運(yùn)算峡碉。如前面列出的信息所示,Haswell的每個(gè)內(nèi)核一個(gè)周期可以處理兩個(gè)FMA指令驮审,每條指令包含4個(gè)雙精度浮點(diǎn)鲫寄,一次FMA浮點(diǎn)運(yùn)算又能當(dāng)兩次普通浮點(diǎn)運(yùn)算來(lái)計(jì)吉执,因此每個(gè)核每周期內(nèi)滿打滿算可以做2*4*2=16次雙精度浮點(diǎn)操作。由于支持了FMA塔拳,表面上看XEON v3比v2浮點(diǎn)性能高了一倍鼠证,但這種說(shuō)法實(shí)際上水分巨大:哪可能要做的總是乘加運(yùn)算?比如傳來(lái)的就是一條AVX浮點(diǎn)乘指令靠抑,此時(shí)v3雖然支持FMA卻也派不上用場(chǎng)量九,v3和v2都需要一個(gè)周期來(lái)完成,即表現(xiàn)出的性能相等颂碧。所以說(shuō)荠列,如果有人說(shuō)v3比v2性能提升一倍那純粹是天方夜譚,除非跑的是專門炫耀Haswell的程序载城,里面的運(yùn)算全都是乘加肌似。根據(jù)實(shí)際測(cè)試來(lái)看,Haswell跑現(xiàn)有的程序也就比Ivy Bridge性能高不到10%诉瓦,但這很難說(shuō)是支持FMA的功勞川队。以后的程序可能會(huì)有一些針對(duì)FMA專門進(jìn)行優(yōu)化,或在編譯時(shí)使用相應(yīng)的優(yōu)化選項(xiàng)(如ifort里用-fma)而使v3有更好的性能睬澡,但不要抱太高期待固额。所以前面提到,買服務(wù)器時(shí)如果v3比v2貴一點(diǎn)可接受煞聪,但貴得太多就算了斗躏。
再來(lái)說(shuō)說(shuō)為什么如今AMD CPU的浮點(diǎn)性能為什么如此之爛。從推土機(jī)架構(gòu)開(kāi)始昔脯,即前面列的Bulldozer/Piledriver/Steamroller這一類啄糙,AMD就用了很糟糕的設(shè)計(jì),兩個(gè)核心作為一個(gè)模塊云稚,共用一個(gè)浮點(diǎn)單元隧饼,一個(gè)周期只能處理一次256bit FMA指令,而Haswell一個(gè)核就能同時(shí)處理兩條256bit FMA指令静陈,也就是說(shuō)燕雁,論峰值浮點(diǎn)性能,現(xiàn)今AMD的U四個(gè)核才頂Haswell一個(gè)核窿给。不過(guò)實(shí)際沒(méi)這么夸張贵白,拋開(kāi)那些很虛的峰值性能數(shù)據(jù)率拒,要達(dá)到如今XEON v2或v3的N個(gè)核的實(shí)際性能崩泡,同頻情況下,如今的Opteron必須要用>2N個(gè)核猬膨。如果程序的并行效率很低角撞,那么Opteron實(shí)際效能簡(jiǎn)直慘不忍睹呛伴,不管怎么算都遠(yuǎn)不如XEON劃得來(lái)。所以說(shuō)谒所,如今做計(jì)算化學(xué)買AMD的U只有后悔的份热康。AMD的U的核數(shù)比較坑人,N個(gè)核才有N/2個(gè)浮點(diǎn)單元(想來(lái)劣领,當(dāng)年AMD還無(wú)恥地說(shuō)Intel的Pentium D是膠水粘的姐军,有點(diǎn)自己打臉的意味),但是整數(shù)性能還說(shuō)得過(guò)去尖淘,整數(shù)單元和核數(shù)是相同的奕锌,但搞計(jì)算化學(xué)的人才不稀罕整數(shù)性能呢。
最后再說(shuō)一下GPU村生。從峰值性能上看惊暴,GPU比起CPU弱點(diǎn)在于頻率低,不支持SIMD趁桃,但它的浮點(diǎn)性能之所以勝于CPU在于流處理器數(shù)目多辽话。以nVidia的高端的GTX Titan black為例,基礎(chǔ)頻率是0.889GHz卫病,有2880個(gè)單精度浮點(diǎn)單元和960個(gè)雙精度浮點(diǎn)單元油啤,每個(gè)浮點(diǎn)單元每周期能做一次FMA指令,因此
單精度峰值浮點(diǎn)性能:0.889*2880*2=5120GFLOPs
雙精度峰值浮點(diǎn)性能:0.889*960*2=1707GFLOPs
可見(jiàn)GTX Titan black峰值性能比前面舉的E5-2690 v2的例子高了約一個(gè)數(shù)量級(jí)忽肛,但這水分太大村砂,顯然不能因?yàn)镕MA就當(dāng)成實(shí)際中有兩倍處理能力,所以公平來(lái)說(shuō)雙精度浮點(diǎn)性能前者是后者4屹逛、5倍的樣子础废。GPU的單精度浮點(diǎn)性能的確很好,性價(jià)比遠(yuǎn)勝于CPU罕模,但一定要注意大多數(shù)消費(fèi)級(jí)GPU的雙精度性能其實(shí)不咋地评腺。GTX Titan black價(jià)格比起同樣流處理數(shù)目的GTX 780Ti貴出一倍,在我來(lái)看貴的主要道理不是因?yàn)樗菬?jí)淑掌,而是雙精度性能能達(dá)到單精度的1/3蒿讥,而這個(gè)比例對(duì)于GTX 780Ti僅為1/24!GTX 780Ti的基準(zhǔn)頻率為0.876GHz抛腕,單精度性能和GTX Titan black基本無(wú)異芋绸,但雙精度峰值性能才區(qū)區(qū)210GFLOPs而已,要不把FMA滿打滿算記入峰值性能計(jì)算公式担敌,那么還明顯不如E5-2690 v2呢摔敛。
PS:這篇文章觀點(diǎn)有點(diǎn)意思,大家不妨看看《GPU運(yùn)算即將退潮 CPU浮點(diǎn)性能革命》(http://www.cgan.net/cganself/founder/?p=2681)