說(shuō)到CPU算力,就不能不提到FLOPS了。
FLOPS是CPU每秒浮點(diǎn)運(yùn)算次數(shù),也稱(chēng)為每秒峰值速度,英語(yǔ)是Floating-point operations per second;簡(jiǎn)寫(xiě)就是FLOPS,flops 或者 flop/s。
在多數(shù)情況下,測(cè)算FLOPS比測(cè)算每秒指令數(shù)(IPS)要準(zhǔn)確。
要測(cè)算FLOPS就要搞清楚浮點(diǎn)數(shù)得精度。
浮點(diǎn)(floating-point)指得是帶有小數(shù)得數(shù)值,浮點(diǎn)運(yùn)算就是小數(shù)得四則運(yùn)算,常用來(lái)測(cè)量計(jì)算機(jī)運(yùn)算速度或被用來(lái)估算計(jì)算機(jī)性能,特別是在科學(xué)計(jì)算領(lǐng)域會(huì)使用到大量得浮點(diǎn)運(yùn)算,對(duì)CPU得算力性能要求就比較高了。
說(shuō)到浮點(diǎn)計(jì)算能力,就涉及到半精度、單精度、雙精度三種類(lèi)型,雙精度是64位得(FP64),單精度是32位得(FP32),半精度是16位得(FP16),半精度是英偉達(dá)在2002年搞出來(lái)得,雙精度和單精度是為了計(jì)算,而半精度更多是為了降低數(shù)據(jù)傳輸和存儲(chǔ)成本。
雙精度浮點(diǎn)數(shù)
單精度浮點(diǎn)數(shù)
半精度浮點(diǎn)數(shù)
雙精度、單精度、半精度都分成3部分,符號(hào)位,指數(shù)和尾數(shù)。
不同精度只不過(guò)是指數(shù)位和尾數(shù)位得長(zhǎng)度不一樣。
解析一個(gè)浮點(diǎn)數(shù)就5條規(guī)則
1、如果指數(shù)位全零,尾數(shù)位是全零,那就表示0
2、如果指數(shù)位全零,尾數(shù)位是非零,就表示一個(gè)很小得數(shù)(subnormal),計(jì)算方式 (?1)^signbit × 2^?126 × 0.fractionbits
3、如果指數(shù)位全是1,尾數(shù)位是全零,表示正負(fù)無(wú)窮
4、如果指數(shù)位全是1,尾數(shù)位是非零,表示不是一個(gè)數(shù)NAN
5、剩下得計(jì)算方式為 (?1)^signbit × 2^(exponentbits?127) × 1.fractionbits
常用得語(yǔ)言幾乎都不提供半精度得浮點(diǎn)數(shù),這時(shí)候需要我們自己轉(zhuǎn)化。
所以,要做算力規(guī)劃時(shí)要結(jié)合其使用場(chǎng)景來(lái)分析,其實(shí)很多場(chǎng)景對(duì)于精度要求也沒(méi)那么高,例如:分布式深度學(xué)習(xí)里面,如果用半精度得話,比起單精度來(lái)可以節(jié)省一半傳輸成本??紤]到深度學(xué)習(xí)得模型可能會(huì)有幾億個(gè)參數(shù),使用半精度傳輸還是非常有價(jià)值得。
通常,在沒(méi)有特別明確算力算法得前提下,我們默認(rèn)都是按照雙精度去測(cè)算算力能力得。
一般做算力規(guī)模分析時(shí)會(huì)明確算力單位如EFLOPS,或PFLOPS,這就需要自己根據(jù)情況去換算了,但都是通過(guò)FLOPS換算而來(lái)得。
浮點(diǎn)計(jì)算值得換算單位:
一個(gè)MFLOPS(megaFLOPS)等于每秒一佰萬(wàn)(=10^6)次得浮點(diǎn)運(yùn)算
一個(gè)GFLOPS(gigaFLOPS)等于每秒拾億(=10^9)次得浮點(diǎn)運(yùn)算
一個(gè)TFLOPS(teraFLOPS)等于每秒萬(wàn)億(=10^12)次得浮點(diǎn)運(yùn)算
一個(gè)PFLOPS(petaFLOPS)等于每秒千萬(wàn)億(=10^15)次得浮點(diǎn)運(yùn)算
一個(gè)EFLOPS(exaFLOPS)等于每秒百億億(=10^18)次得浮點(diǎn)運(yùn)算
一個(gè)ZFLOPS(zettaFLOPS)等于每秒十萬(wàn)京(=10^21)次得浮點(diǎn)運(yùn)算
對(duì)于FLOPS得計(jì)算公式為: FLOPS=CPU核數(shù)*單核主頻*CPU單個(gè)周期浮點(diǎn)計(jì)算值*1000000
只要我們知道CPU得型號(hào),就可以到對(duì)應(yīng)得CPU廠商網(wǎng)站上查詢(xún)相關(guān)參數(shù)了。
下面我們拿intel得CPU為例,到Intel自己進(jìn)行查詢(xún),網(wǎng)址如下:感謝分享ark.intel感謝原創(chuàng)分享者/content/www/us/en/ark/search.html
輸入具體得CPU型號(hào),如 6240R,進(jìn)入對(duì)應(yīng)參數(shù)頁(yè)面。
感謝分享ark.intel感謝原創(chuàng)分享者/content/www/us/en/ark/products/199343/intel-xeon-gold-6240r-processor-35-75m-cache-2-40-ghz.html
CPU單個(gè)周期浮點(diǎn)計(jì)算值有點(diǎn)復(fù)雜,具體如下表
instruction set(指令集) | 每時(shí)鐘周期得單精度運(yùn)算次數(shù) | 每時(shí)鐘周期得雙精度運(yùn)算次數(shù) |
SSE(128-bits) | 8 | 4 |
AVX(256-bits) | 16 | 8 |
AXV2(256-bits) | 32 | 16 |
AXV256(512-bits) | 64 | 16(FMA=1) |
那么,6240R得核數(shù)為10,主頻為2.4Hz,每時(shí)鐘周期得雙精度運(yùn)算次數(shù)32,其單顆CPU得GFLOPS算力算法就是24*2.4*32=1843.2 GFLOPS
索性將之前用過(guò)得CPU都拿出來(lái)分析了一下,順便按照CPU計(jì)算能力排個(gè)序。