CPU TFLOPS 計算

@(System)

姚偉峰

深度學(xué)習(xí)等計算密集型任務(wù)很關(guān)注設(shè)備的峰值算力屑那,落實到具體指標(biāo),就是大家都很關(guān)心T(FL)OPS (Tera (FLoat) OPerations per Second)祸憋。這里,operations具體指的就是乘加操作练湿。該指標(biāo)在GPU上是明確標(biāo)示供查的忽肛,但CPU目前并不會在spec中暴露TOPS指標(biāo)。
一種方法可以通過跑BLAS的benchmark來測量的损敷,這種方法有兩個問題:一是需要一定的操作成本葫笼,二是受軟件優(yōu)化的影響(所以,如果出了問題就容易不知道這是硬件能力不行還是軟件優(yōu)化沒到位)拗馒。因此路星,需要一個對硬件能力的直接估計。
這里提供一個計算CPU峰值算力的公式來解決這個問題诱桂。
T(FL)PS = socket\_num \times core\_num \times frequency \times operations\_per\_cycle
CPU使用SIMD協(xié)處理器(co-processor) 來加速FP32乘加運算洋丐,如SSE呈昔、AVX2、AVX-512友绝。更具體地堤尾,是由協(xié)處理器的FMA(Fused Multiply-Add)單元完成的。所以CPU的T(FL)OPS主要取決于FMA的計算能力迁客。

浮點算力

FP64 TFLOPS計算

AVX FP64 FMA

FP64 FMA乘加指令vfmadd132pd執(zhí)行以下操作:
\vec{o} = \vec{a} \odot \vec郭宝 + \vec{c}
這里,向量的長度由AVX寄存器長度決定哲泊。
如: 一個AVX-512寄存器可以存放8個FP64 (512\ bits\ /\ (8 \times 8) = 8), 那么\vec{o}剩蟀,\vec{a}\vec切威\vec{c}的長度就均為8,一個AVX-512 FMA每個clock cycle可以做8個乘加操作丙号,如下:

因此先朦,F(xiàn)P64的operations\_per\_cycle可以計算如下:
operations\_per\_cycle = fma\_num \times (8 \times 2) = fma\_num \times 16
這里,乘法和加法各算一個操作犬缨,所以8需要乘2喳魏。

舉個栗子

Xeon SkyLake 8180,一個socket有28個core怀薛,每個core有一個AVX-512協(xié)處理器刺彩,每個AVX-512協(xié)處理器配有2個FMA。因此:
operations\_per\_cycle = 2 \times 16= 32
frequency可以通過查spec得到枝恋,這里需要取AVX-512 max all core Turbo frequency创倔,即2.3 GHz。

所以焚碌,一個雙路(dual-socket) SkyLake 8180系統(tǒng)的FP64峰值TFLOPS (Tera FLoat OPerations per Second)為:
TFLOPS = 2 \times 28 \times (2.3 \times 10^9) \times 32 \times 10^{-12} = 4.1216

FP32 TFLOPS計算

AVX FP32 FMA

FP32 FMA乘加指令vfmadd132ps執(zhí)行以下操作:
\vec{o} = \vec{a}\odot\vec畦攘 + \vec{c}
一個AVX-512寄存器可以存放16個FP32 (512\ bits\ /\ (8 \times 4) = 16), 因此\vec{o}\vec{a}十电,\vec知押\vec{c}的長度均為16,一個AVX-512 FMA每個clock cycle可以做16個乘加操作鹃骂,如下:

因此台盯,F(xiàn)P32的operations\_per\_cycle可以計算如下:
operations\_per\_cycle = fma\_num \times (16 \times 2) = fma\_num \times 32

舉個栗子

Xeon SkyLake 8180,一個socket有28個core畏线,每個core有一個AVX-512協(xié)處理器静盅,每個AVX-512協(xié)處理器配有2個FMA。因此:
operations\_per\_cycle = 2 \times 32= 64
又因為8180 AVX-512 max all core Turbo frequency = 2.3GHz象踊,則一個雙路SkyLake 8180系統(tǒng)的FP32峰值TFLOPS為:
TFLOPS = 2 \times 28 \times (2.3 \times 10^9) \times 64 \times 10^{-12} = 8.2432

FP16 TFLOPS計算

Using AVX FP32 FMA

Xeon CPU在SapphirRapids(SPR)之前不支持FP16的原生FMA運算温亲,需要先通過vcvtph2ps指令將FP16轉(zhuǎn)換成FP32棚壁,再通過FP32的FMA運算來完成。此時栈虚,F(xiàn)P16的峰值TFLOPS與FP32的峰值TFLOPS是相等的袖外。

AVX FP16 FMA

從SPR開始,AVX512引入了vfmadd132ph指令用于FP16的FMA運算魂务。凡是CPU Flag中有AVX512_FP16的CPU均支持原生FP16乘加曼验。一個AVX-512寄存器可以存放32個FP16 (512\ bits\ /\ (8 \times 2) = 32),一個AVX-512 FMA每個clock cycle可以做32個乘加操作粘姜,如下:

此時鬓照,F(xiàn)P16的operations\_per\_cycle可以計算如下:
operations\_per\_cycle = fma\_num \times (32 \times 2) = fma\_num \times 64

BF16 TFLOPS計算

Xeon CPU從CooperLake(CPX)開始支持BF16的乘加運算,凡是CPU Flag中有AVX512_BF16的CPU均支持原生BF16乘加孤紧。但因為其復(fù)用了FP32的FMA豺裆,所以暴露出來的BF16指令并不是標(biāo)準(zhǔn)的FMA,而是DP(Dot Product)号显。

AVX BF16 DP

BF16 DP指令vdpbf16ps操作如下:

一個AVX-512寄存器可以存放32個BF16 (512\ bits\ /\ (8 \times 2) = 32)臭猜。因此,一個AVX-512 BF16 DP每個clock cycle可以做32個乘加操作押蚤。
因此蔑歌,operations\_per\_cycle可以計算如下:
operations\_per\_cycle = fma\_num \times (32 \times 2) = fma\_num \times 64

整型算力

INT32 TOPS計算

AVX INT32 MA

CPU通過兩條指令vpmuldq + vpaddq完成INT32的乘加操作,如下:

一個AVX-512寄存器可以存放16個INT32 (512\ bits\ /\ (8 \times 4) = 16)揽碘。因此次屠,一個AVX-512 FMA每2個clock cycle可以做16個INT32乘加操作,即平均每個clock cycle可以做8個INT32乘加操作雳刺。
因此劫灶,operations\_per\_cycle可以計算如下:
operations\_per\_cycle = fma\_num \times (8 \times 2) = fma\_num \times 16

INT16 TOPS計算

pre-VNNI MA

在支持VNNI(Vector Neural Network Instructions)指令前,CPU通過兩條指令vpmaddwd + vpaddd完成INT16的DP操作(原因也是為了復(fù)用INT32的FMA煞烫,所以選擇不支持INT16的FMA浑此,而只支持Multiply Add), 如下:


一個AVX-512寄存器可以存放32個INT16 (512\ bits\ /\ (8 \times 2) = 32)。因此滞详,每2個clock cycle可以做32個INT16乘加操作凛俱,即平均每個clock cycle做16個INT16乘加操作。
因此料饥,operations\_per\_cycle可以計算如下:
operations\_per\_cycle = fma\_num \times (16 \times 2) = fma\_num \times 32

post-VNNI DP

在支持VNNI指令后蒲犬,CPU通過一條指令vpdpwssd完成INT16的乘加操作, 如下:


因此,一個AVX-512 FMA每個clock cycle可以做32個INT16乘加操作岸啡,operations\_per\_cycle可以計算如下:
operations\_per\_cycle = fma\_num \times (32 \times 2) = fma\_num \times 64

INT8 TOPS計算

pre-VNNI MA

在支持VNNI指令前原叮,CPU通過三條指令vpmaddubsw + vpmaddwd + vpaddd完成INT8的DP操作, 如下:

一個AVX-512寄存器可以存放64個INT8 (512\ bits\ /\ (8 \times 1) = 64)。因此,每3個clock可以做64個INT8乘加操作奋隶,即平均每個clock做64 / 3個INT8乘加操作擂送。
因此,operations\_per\_cycle可以計算如下:
operations\_per\_cycle = fma\_num \times (64\ /\ 3 \times 2) = fma\_num \times 128 \ / \ 3

post-VNNI DP

在支持VNNI指令后唯欣,CPU通過一條指令vpdpbusd完成INT8的DP操作, 如下:

一個AVX-512寄存器可以存放64個INT8 (512\ bits\ /\ (8 \times 1) = 64)嘹吨。因此,一個AVX-512 FMA每個clock cycle可以做64個INT8乘加操作境氢。
因此蟀拷,operations\_per\_cycle可以計算如下:
operations\_per\_cycle = fma\_num \times (64 \times 2) = fma\_num \times 128

References

  1. Intel? Intrinsics Guide
  2. Intel?AVX512-FP16 Architecture Specification
  3. CUDA Toolkit Document - The Fused Multiply-Add (FMA)
  4. Native Code Performance on Modern CPUs: A Changing Landscape
  5. Wiki: Multiply–accumulate operation
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市萍聊,隨后出現(xiàn)的幾起案子问芬,更是在濱河造成了極大的恐慌,老刑警劉巖寿桨,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件此衅,死亡現(xiàn)場離奇詭異,居然都是意外死亡亭螟,警方通過查閱死者的電腦和手機(jī)炕柔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來媒佣,“玉大人,你說我怎么就攤上這事陵刹∧椋” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵衰琐,是天一觀的道長也糊。 經(jīng)常有香客問我,道長羡宙,這世上最難降的妖魔是什么狸剃? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮狗热,結(jié)果婚禮上钞馁,老公的妹妹穿的比我還像新娘。我一直安慰自己匿刮,他們只是感情好僧凰,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著熟丸,像睡著了一般训措。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天绩鸣,我揣著相機(jī)與錄音怀大,去河邊找鬼。 笑死呀闻,一個胖子當(dāng)著我的面吹牛化借,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播总珠,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼屏鳍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了局服?” 一聲冷哼從身側(cè)響起钓瞭,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淫奔,沒想到半個月后山涡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡唆迁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年鸭丛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唐责。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡鳞溉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鼠哥,到底是詐尸還是另有隱情熟菲,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布朴恳,位于F島的核電站抄罕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏于颖。R本人自食惡果不足惜呆贿,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望森渐。 院中可真熱鬧做入,春花似錦、人聲如沸章母。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乳怎。三九已至彩郊,卻和暖如春前弯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秫逝。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工恕出, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人违帆。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓浙巫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刷后。 傳聞我的和親對象是個殘疾皇子的畴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • SIMD 1、概述 SIMD全稱Single Instruction Multiple Data尝胆,單指令多數(shù)據(jù)流丧裁,...
    Yao_0閱讀 9,934評論 3 4
  • 教程一:視頻截圖(Tutorial 01: Making Screencaps) 首先我們需要了解視頻文件的一些基...
    90后的思維閱讀 4,654評論 0 3
  • 問題原因 在macOS通過pip3 install 安裝tensorflow(CPU版)后,運行示例代碼 運行之后...
    且自小堯沒誰管閱讀 6,412評論 0 4
  • 我沒有想到含衔,會跟隨我的學(xué)生們煎娇,一同由分校進(jìn)入了中心小學(xué),而且繼續(xù)擔(dān)任他們的班主任贪染。 能和自己相處四年的孩子缓呛,共同度...
    羞蓮閱讀 267評論 2 12
  • 記得第一次見到丑貓,是在小區(qū)的門口,渾身臟兮兮的杭隙,看起來一點不招人待見哟绊。他就趴在那,舔舐著爪子痰憎,有一下沒一下的梳理...
    咖啡加枸杞閱讀 856評論 0 5