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