精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

單核M1 CPU上實現FP32 1.5 TFlops算力?這是一份代碼指南

開發
需要注意的是:如果你打算訓練大型神經網絡,那么就可以忽略這篇文章的內容了,因為它比 A100(156TFlops)慢 100 倍。
?1.5 TFlops 到底有何魅力?

首先,這是在電池供電的單核 MacBook Air 2020 上運行;

其次,這會以每條指令約 0.5 納秒的延遲運行。

那些強大的加速器或 GPU 張量核不在我們的考慮范疇。我們這里討論的是與 CPU 寄存器相隔一個周期的實際線性代數性能。

奇怪的是,蘋果一直在向我們隱瞞這一點。在本文中,我們將通過一些代碼來揭開迷霧。

什么是 AMX 協處理器?

它可以說是 SIMD 的典范。一個重要的區別是 AMX:CPU 比率不是 1:1;并非每個內核都有自己的 AMX 協處理器。

以下是用于加載或存儲值的規格:

圖片

最小值與完整的 AVX512 寄存器一樣寬

但這些值是從哪里加載或存儲的?顯然,這樣的大小會很快用完整個 NEON 寄存器文件。不過 AMX 有一個單獨的寄存器文件,這有些奇怪。

寄存器分為三組:X、Y 和 Z。對每個指令,X 和 Y 組保存輸入,Z 組保存輸出。

圖片

如我們所見,X 和 Y 相當大。二者之間有一個完整的 KB。Z 則令人稱奇,然后是一些:

圖片

(劇透:一條 AMX 指令可以填充 1024 字節(Z 寄存器的 1/4)。)

那么如何從 X 和 Y 到 Z?方法很多,以至于它不那么適合 ISA 編碼。所以蘋果決定將大部分指令信息編碼在通用寄存器中。事實證明,這個決定很贊,因為可以在 AMX 上執行代碼的運行時(動態)配置。

這篇文章旨在提高協處理器利用效率。有一些 vector-vector 指令可以輸出長度相同的向量,但不會使芯片的計算能力飽和。反而必須借助外積來進行。?

何為外積?假設有兩個輸入向量 u 和 v:

圖片

外積是一個矩陣,包含各元素可能組合對的乘積。(這里給出一些提示,說明為什么 Z 寄存器組比 X 和 Y 大得多。)

圖片

在 AMX 芯片上,可歸結為一個非常簡單的指令,就像這樣:

圖片

可以設置一個標志,使其從上一個結果中累加:

圖片

這樣,我們就完全具備了編寫矩陣乘法所需:從輸入矩陣中重復加載 16 個浮點數,并將它們的外積累加成 16x16 輸出。縮小 K 尺寸甚至無關緊要!

我們簡化一下這個問題,并隱式轉置矩陣乘法。A 和 B(輸入)都將 K(縮減維度)作為主導維度。這在實踐中并不重要,但它大大簡化了我們的代碼。

這里有一個參考,可用來檢查我們提出的解決方案:

void reference_16x16xK (float *A, float *B, float *C, uint64_t K) {
for (uint32_t m = 0; m < 16; ++m) {
for (uint32_t n = 0; n < 16; ++n) {
C [n * 16 + m] = 0;
for (uint32_t k = 0; k < K; ++k) {
C [n * 16 + m] += A [k * 16 + m] * B [k * 16 + n];
}
}
}
}

下面是我們在 AMX 中的實現方法:

/only set for k == 0uint64_t reset_z = 1ull << 27;
for (uint32_t k = 0; k < K; ++k) {
uint64_t idx = k % 4;
// 64 bytes = 16 floats
AMX_LDX ((uint64_t) A + k * 64);
AMX_LDY ((uint64_t) B + k * 64);

//now we do 4 indepedent outer products (avoiding pipeline hazards)
AMX_FMA32 (reset_z);
reset_z = 0;
}

神奇的是,我們沒有處理任何寄存器,但卻悄悄做了些處理。以同樣的方式將 reset_z 編碼為位掩碼,寄存器地址也編碼在傳遞給 AMX_* 的參數中。指向 A 和 B 的指針最多只能使用 56 位,因此蘋果工程師將信息存儲在其他 8 位中。我們只是意外將其全部設置為 0。因此,在本例中,對 X 和 Y 我們將寄存器置 “0”。

將 Z 寄存器存儲到內存的代碼有點復雜,因為我們只填充了第一列。所以需要獲取寄存器 0、4、8 等:

for (uint64_t i = 0; i < 16; ++i) {
const uint64_t z_register = (i * 4ull) << 56;
AMX_STZ (z_register | (uint64_t) C + i * 64);
}

但你會發現,運行上面的代碼非常慢。只有區區幾百 GFlops。

為什么會這樣?有兩個原因。

開始的減速是流水線冒險。每個 AMX_FMA32 都依賴于前一個,因為全都累積到寄存器文件的一個子集中。我們最終只達到了寄存器文件全節流的 25%,剩余部分閑置,未能實現指令級并行。

接下來的問題是從內存中加載的效率很低。我們其實可以一次加載  128 個字節,但上面的代碼只能加載 64 個字節。類似地,可以加載到其他寄存器,不必每次都加載到相同的寄存器。也可以實現一定程度的指令級并行。

那么計劃是什么?

圖片

我們將向 X 和 Y 加載 128 個字節,然后計算一個 32x32 塊。這將涉及 16x16 塊的 4 次獨立計算,形成指令級并行,可以更高效利用加載的內存(每個 64 字節寄存器使用兩次)。

void mm32x32xK (float* A, float* B, float* C, uint64_t K) {

//flag to load/store 128 bytes
const uint64_t load_store_2 = 1ull << 62;
const uint64_t load_store_width = 128; //in bytes

//only set for k == 0
uint64_t reset_z = 1ull << 27;


for (uint32_t k = 0; k < K; ++k) {
uint64_t idx = k % 4;
//load to X, Y (skipping every other index because we're loading 128 bytes)
AMX_LDX (load_store_2 | (idx * 2) << 56 | (uint64_t) A + k * load_store_width);
AMX_LDY (load_store_2 | (idx * 2) << 56 | (uint64_t) B + k * load_store_width);

//offset into X and Y registers is byte-wise
const uint64_t offset = idx * load_store_width;

//now we do 4 indepedent outer products (avoiding pipeline hazards)
AMX_FMA32 (reset_z | (0ull << 20) | ((offset + 0ull) << 10) | ((offset + 0ull) << 0));
AMX_FMA32 (reset_z | (1ull << 20) | ((offset + 64ull) << 10) | ((offset + 0ull) << 0));
AMX_FMA32 (reset_z | (2ull << 20) | ((offset + 0ull) << 10) | ((offset + 64ull) << 0));
AMX_FMA32 (reset_z | (3ull << 20) | ((offset + 64ull) << 10) | ((offset + 64ull) << 0));
reset_z = 0;
}

for (uint64_t i = 0; i < 16; ++i) {
//store interleaved
AMX_STZ (load_store_2 | ((i * 4ull + 0) << 56) | (uint64_t) C + i * load_store_width);
AMX_STZ (load_store_2 | ((i * 4ull + 2) << 56) | (uint64_t) C + (16 + i) * load_store_width);
}
}
void mm32x32xK (float* A, float* B, float* C, uint64_t K){
//flag to load/store 128 bytes const uint64_t load_store_2 = 1ull << 62; const uint64_t load_store_width = 128; //in bytes
//only set for k == 0 uint64_t reset_z = 1ull << 27;

for (uint32_t k = 0; k < K; ++k) { uint64_t idx = k % 4; //load to X, Y (skipping every other index because we're loading 128 bytes) AMX_LDX (load_store_2 | (idx * 2) << 56 | (uint64_t) A + k * load_store_width); AMX_LDY (load_store_2 | (idx * 2) << 56 | (uint64_t) B + k * load_store_width);
//offset into X and Y registers is byte-wise const uint64_t offset = idx * load_store_width;
//now we do 4 indepedent outer products (avoiding pipeline hazards) AMX_FMA32 (reset_z | (0ull << 20) | ((offset + 0ull) << 10) | ((offset + 0ull) << 0)); AMX_FMA32 (reset_z | (1ull << 20) | ((offset + 64ull) << 10) | ((offset + 0ull) << 0)); AMX_FMA32 (reset_z | (2ull << 20) | ((offset + 0ull) << 10) | ((offset + 64ull) << 0)); AMX_FMA32 (reset_z | (3ull << 20) | ((offset + 64ull) << 10) | ((offset + 64ull) << 0)); reset_z = 0; }
for (uint64_t i = 0; i < 16; ++i) { //store interleaved AMX_STZ (load_store_2 | ((i * 4ull + 0) << 56) | (uint64_t) C + i * load_store_width); AMX_STZ (load_store_2 | ((i * 4ull + 2) << 56) | (uint64_t) C + (16 + i) * load_store_width); }}

我在上面添加了注釋,關于說明性標志有些有趣的細節。Corsix 在解釋這一點上做得很好,所以我要留下鏈接:

  • 加載和存儲標志:https://github.com/corsix/amx/blob/main/ldst.md
  • FMA 標志:https://github.com/corsix/amx/blob/main/fma.md

那么我們到底能有多快?這一定程度上取決于 K,但我們達到了 1.5TFlops 處理的問題更大相對來說會獲得更好的性能,這也不足為奇,因為緩存可以更好地預熱,CPU 有更多時間交錯指令。

圖片

總的來說,在當今大型神經網絡競相追逐通用 AI 的背景下,這類問題顯得微不足道,然而卻為小型神經網絡在現實計算中找到一席之地。如果一個預測模型可于幾十納秒內在電池供電的筆記本上運行,或將為原本可能使用探試算法的地方帶來更多價值。你怎么看?

原文鏈接:https://jott.live/markdown/1.5tflop_m1?

責任編輯:趙寧寧 來源: 機器之心
相關推薦

2020-06-01 15:04:44

甲骨文自治數據庫

2023-05-15 09:51:23

算力開發

2023-09-01 14:02:25

用戶分析攻略

2020-03-06 15:38:10

編程語言PythonJava

2025-10-17 02:00:00

2019-04-22 08:10:08

CPU優化服務器

2023-04-28 15:41:08

模型ChatGPT

2018-05-15 09:15:03

CNN卷積神經網絡函數

2018-09-20 05:01:06

2019-03-18 08:08:24

知識圖譜技術

2018-07-31 14:58:08

2019-02-21 09:13:31

圖卷積網絡Numpy神經網絡

2019-03-24 14:14:40

代碼閱讀源代碼

2018-01-29 16:29:35

數據開發從業

2019-06-10 15:06:56

高考AI人工智能

2021-10-22 06:04:05

勒索軟件攻擊報告

2019-03-15 15:15:12

硬盤SSD閃存

2011-12-15 09:07:21

javaeclipse

2021-01-19 15:57:53

CorelliumMacLinux
點贊
收藏

51CTO技術棧公眾號

亚洲蜜桃av| 欧美亚洲另类视频| 午夜男人的天堂| 欧美va视频| 亚洲男帅同性gay1069| 国产原创精品| 中文字幕+乱码+中文乱码91| 午夜天堂精品久久久久| 欧美在线一二三四区| 天堂v在线视频| 亚洲欧美日韩免费| 久久成人麻豆午夜电影| 午夜精品久久久99热福利| 偷拍夫妻性生活| 在线观看福利电影| 亚洲女同一区二区| 欧美激情一区二区三区在线视频 | 视频一区日韩精品| 欧美色欧美亚洲高清在线视频| 国外成人免费视频| www.日本精品| 亚洲最大在线| 精品日韩成人av| 男人添女荫道口图片| 最新国产在线观看| 91丨九色丨尤物| 国产第一区电影| av永久免费观看| 欧美电影在线观看完整版| 欧美一区午夜精品| 国产91色在线观看| 成人小电影网站| 亚洲国产三级在线| 奇米777四色影视在线看| 91社区在线高清| 国产亚洲午夜高清国产拍精品| 国产精品视频永久免费播放| 久久国产精品系列| 亚洲人成毛片在线播放女女| 欧美成人中文字幕| 特一级黄色录像| 久久综合88| 色妞欧美日韩在线| 精品久久久久久无码人妻| 天堂中文av在线资源库| 亚洲成人在线网站| 欧美性潮喷xxxxx免费视频看| 日韩av免费观影| www.色综合.com| 国产精品免费视频一区二区| 亚洲av无码精品一区二区| 国产美女精品| 欧美一级视频免费在线观看| 日韩激情在线播放| 99riav1国产精品视频| 久久久久久久电影一区| 精品一级少妇久久久久久久| 欧美日韩亚洲一区三区| 欧美精品18videos性欧美| 国产亚洲精久久久久久无码77777| 国产欧美日韩在线观看视频| 亚洲欧美第一页| 永久免费成人代码| 欧美偷拍自拍| 日韩视频欧美视频| 欧美国产日韩在线观看成人| 欧美96在线丨欧| 欧美精品久久久久久久免费观看| 人妻aⅴ无码一区二区三区| 国产精品一区2区3区| 丝袜一区二区三区| 中文字幕另类日韩欧美亚洲嫩草| 欧美日韩在线网站| 日韩精品欧美国产精品忘忧草| 两性午夜免费视频| 成人性片免费| 欧美一卡二卡三卡| 欧美一级xxxx| 亚洲综合影院| 亚洲免费高清视频| 青青操在线播放| 国产精品黄色| 欧美一区二三区| 日韩精品一区二区在线播放| 久久国产精品久久久久久电车 | wwww亚洲| 日韩欧美精品网址| 亚洲国产日韩欧美在线观看| 波多野结衣亚洲| 欧美美女视频在线观看| 男人添女人荫蒂国产| 伊人久久大香线蕉av不卡| 久久久999国产| 国产成人自拍视频在线| 激情综合在线| 国产精品黄色影片导航在线观看| 在线观看中文字幕视频| 另类中文字幕网| 国产日韩欧美一区二区| av在线免费观看网| 亚洲www啪成人一区二区麻豆| 无码人妻精品一区二区蜜桃网站| 亚洲资源一区| 在线观看亚洲精品视频| 人妻激情偷乱频一区二区三区| 一本色道69色精品综合久久| 亚洲网址你懂得| 91激情视频在线观看| 午夜日韩电影| 国产欧美日韩最新| 91亚洲精品国偷拍自产在线观看| 美女一区二区视频| 久久99精品久久久久久秒播放器 | 国产亚洲欧洲高清| 亚洲精品国产精品国自| 久久久影院免费| 欧美在线xxx| 亚洲爆乳无码一区二区三区| 欧美国产禁国产网站cc| 久在线观看视频| 色播一区二区| 久久精品99久久久香蕉| 久久久久噜噜噜亚洲熟女综合| 亚洲国产一区二区精品专区| 欧美一区亚洲一区| 亚洲伦理在线观看| 久久丝袜美腿综合| 亚洲午夜激情| 亚洲伦乱视频| 亚洲免费小视频| 日韩精品一卡二卡| 美国一区二区三区在线播放| 美脚丝袜一区二区三区在线观看| а天堂8中文最新版在线官网| 中文字幕日本乱码精品影院| 午夜dv内射一区二区| 婷婷精品在线观看| 欧美激情综合亚洲一二区| 国产成人精品一区二三区四区五区| 成人av免费在线播放| 国产911在线观看| 国产一区二区三区精品在线观看 | 狠狠色综合网| 亚洲xxx视频| 青青草av免费在线观看| 精品福利视频导航| 国产 xxxx| 91麻豆国产自产在线观看亚洲| 欧美黑人性猛交| www.97av| 一区二区三区.www| 性一交一黄一片| 国产精品激情电影| 国产午夜精品一区| 老司机深夜福利在线观看| 精品国产乱码久久久久久免费| 性欧美精品男男| 奇米影视在线99精品| 亚洲欧美日韩精品久久久| 精品亚洲a∨| 久久久精品在线观看| 国产成人精品a视频| 夜夜揉揉日日人人青青一国产精品| 日韩精品无码一区二区三区免费| 亚洲高清在线一区| 欧美激情视频免费观看| 亚洲av片在线观看| 欧美性欧美巨大黑白大战| 日韩 中文字幕| 欧美午夜一区二区福利视频| 国产精品一国产精品最新章节| 视频三区在线| 精品欧美一区二区三区精品久久| 亚洲精品国产精品乱码在线观看| 另类激情亚洲| 无码免费一区二区三区免费播放 | 亚洲激情午夜| 农村寡妇一区二区三区| 成人四虎影院| 久久久久久久亚洲精品| 蜜桃视频在线播放| 日韩一区二区免费在线观看| 日本中文字幕在线免费观看| 国产欧美日韩综合精品一区二区| 日韩视频第二页| 欧美巨大xxxx| 国产美女久久精品| 波多野结衣乳巨码无在线观看| 欧美成人精品二区三区99精品| 亚洲不卡在线播放| 91偷拍与自偷拍精品| 无码精品a∨在线观看中文| 日韩免费一区| 精品国产一区二区三区麻豆小说| www.综合| 久久精品国产99国产精品澳门| 国产精品嫩草影院精东| 欧美日韩国产一中文字不卡 | 国产精品免费aⅴ片在线观看| 国产成人无码一二三区视频| 网曝91综合精品门事件在线 | 99精品视频在线免费播放 | 四虎国产精品成人免费入口| 狠狠色丁香婷婷综合久久片| 亚洲午夜无码av毛片久久| 女同性一区二区三区人了人一| 5566av亚洲| 欧美成人app| 久久人人爽人人爽人人片av高清| 网站黄在线观看| 欧美一区二区视频观看视频| 九九精品在线观看视频| 中文久久乱码一区二区| 亚洲最大免费视频| 国产成人免费网站| 亚洲欧美日本一区二区三区| 久久一区激情| 国产资源在线视频| 在线播放亚洲| 污污污污污污www网站免费| 欧美岛国激情| 色涩成人影视在线播放| 亚洲ab电影| 国产视频在线观看一区| 日韩高清二区| 92看片淫黄大片看国产片| 成人黄色免费观看| 国产成人在线视频| 97成人资源| 丝袜情趣国产精品| 韩国中文字幕hd久久精品| 欧美性少妇18aaaa视频| 日韩久久久久久久久| 一区二区三区成人| 黄色一级片在线| 亚洲欧美激情插| 你懂得在线观看| 国产精品嫩草影院av蜜臀| 香蕉视频免费网站| 国产91综合网| 特种兵之深入敌后| 国产精品 欧美精品| 91在线第一页| 国产精品99久久久久久似苏梦涵 | 亚洲国产欧美不卡在线观看| 久久99国产精一区二区三区| 欧美另类一区| 999精品视频在这里| 国产精品v欧美精品v日韩精品| 久久久成人av毛片免费观看| 国产精品久久久久久久久久久新郎| 欧美男男video| 欧美黄色小视频| 波多野结衣在线观看| 午夜精品三级视频福利| 毛片电影在线| 国产91色在线|| 成人国产网站| 成人h视频在线| 久久影院一区二区三区| 波多野结衣久草一区| 精品176极品一区| 日韩暖暖在线视频| 青草综合视频| 国产激情综合五月久久| 久久精品国产福利| 91九色视频在线观看| 美女扒开腿让男人桶爽久久动漫| 99视频在线| 欧洲亚洲视频| 国产精品乱子乱xxxx| 1204国产成人精品视频| 久久伦理网站| 三级精品视频| 国产精品区二区三区日本| 日韩一级电影| 一区二区在线观| 在线看片一区| 日本熟妇人妻中出| 国产成人h网站| 亚洲人成人无码网www国产 | 色哟哟一区二区| 亚洲精品一区二区二区| 欧美一级理论片| 日韩国产福利| 欧美成人亚洲成人日韩成人| 成人免费看视频网站| 91人人爽人人爽人人精88v| 任你弄精品视频免费观看| 国产一区二区三区四区五区在线| 99精品国产一区二区三区2021| 91国产丝袜在线放| 禁断一区二区三区在线| 欧美黑人在线观看| 亚洲激情av| 在线免费看污网站| 日韩综合一区二区| 中文字幕一区久久| 99久久久国产精品免费蜜臀| 欧美精品 - 色网| 不卡的av网站| 国产精品一区二区亚洲| 国产精品成人免费在线| jizzjizz日本少妇| 午夜欧美视频在线观看| 亚洲特级黄色片| 麻豆免费在线| 综合网日日天干夜夜久久| 精精国产xxxx视频在线中文版| 久久久久久国产精品三级玉女聊斋| 爱看av在线| 91香蕉亚洲精品| 国产不卡一二三区| 国产免费黄色一级片| 麻豆精品精品国产自在97香蕉| 久热精品在线观看视频| 91在线免费播放| 黄色一级片在线| 欧美日韩国产天堂| 欧美91精品久久久久国产性生爱| 这里精品视频免费| 新版的欧美在线视频| 成人欧美一区二区三区在线观看 | 在线观看一区二区视频| 日韩在线观看视频网站| 九九视频这里只有精品| 美女视频一区| 亚洲成人自拍| 日精品一区二区| 久久丫精品忘忧草西安产品| 精品久久久久久久久久久久| 中文字幕乱码中文字幕| 亚洲欧美日韩久久久久久| 手机在线理论片| 精品人伦一区二区三区| 亚洲每日更新| 182在线视频| 亚瑟在线精品视频| 午夜精品久久久久久久91蜜桃| 亚洲免费av网址| 自拍偷拍亚洲视频| 美乳视频一区二区| 亚洲一区中文| 国产男男chinese网站| 色系网站成人免费| 国模吧精品人体gogo| 日本中文字幕久久看| 国产探花在线精品| 中文字幕第80页| 国产精品久久久久久久久搜平片| 日韩av片在线播放| 亚洲国产欧美一区| 天堂√中文最新版在线| 欧美日韩中文国产一区发布| 青娱乐精品视频| 97在线观看视频免费| 日韩欧美在线123| 第一av在线| 久久一区免费| 日韩成人av影视| 亚洲欧美日本一区| 日韩欧美精品在线观看| 91女主播在线观看| 91在线观看免费高清| 无码国产精品一区二区色情男同 | 亚洲久久久久久| 国产精品成人免费精品自在线观看| 日韩成人在线免费视频| 国产视频精品久久久| 校园春色亚洲色图| 精品视频在线观看| 欧美精品国产一区二区| 国产伦精品一区二区三区精品| 亚洲欧美日韩国产综合在线| www男人的天堂| 日本亚洲欧美成人| 久久男人av| 成年人在线看片| 亚洲欧美色一区| 成人激情春色网| 日韩精品四区| 中文字幕乱码在线人视频| 国产精品毛片无遮挡高清| 国产三级精品在线观看| 91极品女神在线| 久久亚洲影视| 99精品一区二区三区无码吞精| 一区二区三区四区五区视频在线观看| 国产成人无码精品| 日韩欧美二区三区| 345成人影院| 天堂av在线中文| xfplay精品久久| 国产视频一二三四区| 欧美一级淫片播放口| 欧美在线观看天堂一区二区三区| 密臀av一区二区三区| 亚洲精品乱码久久久久久久久| 五月婷婷视频在线| 久久精品国产一区二区三区|