CPU AMX 詳解

CPU AMX 詳解

@(System)[CPU]

概述

2016 年開始,隨著 NV GPU AI 能力的不斷加強,隱隱感覺到威脅的 Intel 也不斷在面向數(shù)據(jù)中心的至強系列 CPU 上堆砌計算能力饮戳,增加 core count 然想、提高 frequency 梯嗽、增強向量協(xié)處理器計算能力三管其下匕得。幾乎每一代 CPU 都在 AI 計算能力上有所增強或拓展,從這個方面來講栈虚,如果我們說它沒認識到袖外,沒有采取行動,也是不公平的魂务。

從上圖不難看到曼验,2015年的 Sky Lake 首次引入了 AVX-512 (Advanced Vector eXtensions)向量協(xié)處理器,與上一代 BroadwellAVX2 相比粘姜, 每個向量處理器單元的單精度浮點乘加吞吐翻倍鬓照。接著的Cascade LakeCooper Lake又拓展了 AVX-512 ,增加了對 INT8BF16 精度的支持孤紧,奮力想守住 inference 的基本盤豺裆。一直到 Sapphire Rapids,被市場和客戶用腳投票号显,前有狼(NVIDIA)后有虎(AMD)臭猜,都把自己的食盆都快拱翻了,終于意識到在AI的計算能力上不能在按摩爾定律線性發(fā)育了押蚤,最終也步GoogleNVIDIA的后塵获讳,把AVX升一維成了AMX(Advanced Matrix eXtension),即矩陣協(xié)處理器了活喊。充分說明一句老話,你永遠叫不醒一個裝睡的人,要用火燒他钾菊。不管怎么樣帅矗,這下總算是賽道對齊了,終于不是拿長茅對火槍了煞烫。

算力如何

AI 工作負載 Top-2 的算子:

  • Convolution
  • MatMul/Fully Connected

這倆本質(zhì)上都是矩陣乘浑此。怎么計算矩陣乘,有兩種化歸方法:

  • 化歸成向量點積的組合滞详,這在CPU中就對應(yīng)AVX
  • 化過程分塊矩陣乘的組合凛俱,這在CPU就對應(yīng)AMX

我們展開講講。

問題定義

假設(shè)有如下矩陣乘問題:
??_{?? \times ??} += ??_{??×??} ??_{??×??}

AVX如何解決矩陣乘問題

AVX把向量作為一等公民料饥,每次計算一個輸出元素C[i, j]蒲犬,而該元素等于A的第i行與B的第j列的點積,即有:
C[i, j] += A[i, :] \times B[:, j]
不就化歸成向量點積了嘛岸啡。那向量的長度是可以任意指定的原叮,但硬件是有固定長度的,怎么辦巡蘸?很簡單奋隶,就把每個向量切成每個長度為k的塊,多做幾次就好了悦荒。這個k就是區(qū)分AVX各代的主要因素唯欣。下面以AVX2為例淺釋一下。

AVX2 FP32 (k=8)
AVX2使用的寄存器長度為256 bit搬味,也就是8個FP32數(shù)境氢,此時k=8。AVX的乘加> 指令操作示意如下:

一個時鐘周期可以完成兩個8維向量的點積操作身腻,也叫FMA(Fused Multiply > Add)操作产还。因此每個AVX單元的FLOPS為:16 FLOPS/cycle。

以FP32/BF16為例嘀趟,AVX算力的代際演進如下脐区,可以看出相鄰代際增長是平平無奇的2倍。


AMX如何解決矩陣乘問題

以BF16為例她按,AMX把矩陣乘操作化歸為若干個C_{16 \times 16} += A_{16 \times 32} \times B_{32\times16}的分塊矩陣乘的組合牛隅,如下所示。

需要注意的是整個操作需要16個cycle完成酌泰,因此不難計算每個AMX單元的FLOPS為:1024 OPS/cycle媒佣。這下單AMX單元與單AVX單元的每時鐘周期的算力提高了16倍,有點像樣了陵刹。目前Sapphire Rapids每個核有一個AMX單元默伍,而有兩個AVX單元,因此每核的每時鐘周期算力提高倍數(shù)為8倍。

如何計算含有AMX CPU的peak TFLOPS
公式:

BF16\_peak\_FLOPS = core\_count \times frequency \times ops\_per\_cycle

假設(shè)你有一個56核也糊,每核有1個AMX單元炼蹦,且AMX頻率為1.9 GHz的CPU。其BF16 peak TFLOPS應(yīng)為:
BF16\_peak\_FLOPS = \frac{56 \times (1.9 \times 10^9) × 1024}{10^{12}} = 108.9

如何實現(xiàn)的

AMX圍繞矩陣這一一等公民的支持分為計算和數(shù)據(jù)兩個部分狸剃。


  • 計算部分:目前僅有矩陣乘支持掐隐,由稱為TMUL(Tile Matrix mULtiply Unit)的模塊來實現(xiàn)。但也為后面支持其他的矩陣運算留了想像钞馁。
  • 數(shù)據(jù)部分:由一組稱為TILES的二維寄存器來承擔虑省。

其系統(tǒng)框圖如下:


計算部分

TMUL 硬件層面的實現(xiàn)也比較直觀,是一個典型的systolic array設(shè)計僧凰。比較好的是array的每一行都復(fù)用了原來的AVX-512 BF16的設(shè)計探颈,堆疊了16個AVX-512 BF16單元,在一個cycle內(nèi)完成了一個C_{1 \times 16} += A_{1 \times 32} \times B_{32\times16}的運算允悦,因此完成整個C_{16 \times 16} += A_{16 \times 32} \times B_{32\times16}的計算需要16個cycle膝擂。

Systolic形式的邏輯圖,如下隙弛〖懿觯可以看出每個cycle輸出 C 的一行結(jié)果。

數(shù)據(jù)部分

每個AMX單元共有8組TILES寄存器全闷,TILE寄存器可以存放一個二維矩陣的子矩陣叉寂,有專門的load/store指令。


每個TILE寄存器容量為:16行 \times 64 bytes总珠,因此可用于存放:

  • 16 \times 16 的 FP32 矩陣
  • 16 \times 32 的 BF16 矩陣
  • 16 \times 64 的 INT8 矩陣

路才開始

邁出腳只是路的開始屏鳍,而不是結(jié)束。后面有的是路(問題):

  • HW
    • TILE 和 memory 之間的 load 和 save 帶寬與TMUL計算能力的匹配度
    • AI workload 一般都是矩陣操作(matmul, conv等)與向量操作混雜局服,而向量操作有分為 element-wise 操作和 reduce 類操作
      • 這3類操作算力的匹配度
      • 矩陣寄存器與向量寄存器之間的 data path 通暢度如何
    • ......
  • SW
    • 如何提高SW efficiency
    • 如何擺平AI框架要求的plain data layout與AMX硬件要求的data layout之間的re-layout開銷
    • ......

讓我們邊走邊看钓瞭!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市淫奔,隨后出現(xiàn)的幾起案子山涡,更是在濱河造成了極大的恐慌,老刑警劉巖唆迁,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸭丛,死亡現(xiàn)場離奇詭異,居然都是意外死亡唐责,警方通過查閱死者的電腦和手機鳞溉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鼠哥,“玉大人熟菲,你說我怎么就攤上這事看政。” “怎么了抄罕?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵帽衙,是天一觀的道長。 經(jīng)常有香客問我贞绵,道長,這世上最難降的妖魔是什么恍飘? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任榨崩,我火速辦了婚禮,結(jié)果婚禮上章母,老公的妹妹穿的比我還像新娘母蛛。我一直安慰自己,他們只是感情好乳怎,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布彩郊。 她就那樣靜靜地躺著,像睡著了一般蚪缀。 火紅的嫁衣襯著肌膚如雪秫逝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天询枚,我揣著相機與錄音违帆,去河邊找鬼。 笑死金蜀,一個胖子當著我的面吹牛刷后,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播渊抄,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼尝胆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了护桦?” 一聲冷哼從身側(cè)響起含衔,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘶炭,沒想到半個月后抱慌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡眨猎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年抑进,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睡陪。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡寺渗,死狀恐怖匿情,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情信殊,我是刑警寧澤炬称,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站涡拘,受9級特大地震影響玲躯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鳄乏,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一跷车、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧橱野,春花似錦朽缴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蜗元,卻和暖如春或渤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背许帐。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工劳坑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人成畦。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓距芬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親循帐。 傳聞我的和親對象是個殘疾皇子框仔,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

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