精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久青草欧美一区二区三区| 欧美精品99| 欧美裸体bbwbbwbbw| 国产又大又长又粗又黄| 蜜臀久久精品久久久久| 久久久精品午夜少妇| 波霸ol色综合久久| 亚洲精品乱码久久| 成人豆花视频| 一本一道波多野结衣一区二区| 中文字幕精品一区日韩| 手机看片一区二区| 久久精品国产精品亚洲红杏 | 99热国产免费| 精品无码一区二区三区的天堂| 伊人久久大香线蕉综合四虎小说 | 在线日本视频| 成人av片在线观看| 91久热免费在线视频| 天堂网视频在线| 尤物精品在线| 萌白酱国产一区二区| a级在线免费观看| 国产精品视屏| 日韩欧美久久一区| 亚洲精品20p| 韩国精品主播一区二区在线观看| 亚洲成a人片综合在线| 中文字幕精品—区二区日日骚| 酒色婷婷桃色成人免费av网| 成人99免费视频| 99在线视频首页| 97免费观看视频| 日本最新不卡在线| 国产成人久久久精品一区| 久久久久亚洲av片无码下载蜜桃| 天天揉久久久久亚洲精品| 亚洲午夜精品视频| 99久久精品免费视频| 女人av一区| 亚洲精品一二区| 国产精品久久AV无码| 国产精品1luya在线播放| 日韩一区二区三区免费观看| 中文字幕色网站| 91精品福利观看| 69堂成人精品免费视频| 中文字幕亚洲影院| 91麻豆精品国产综合久久久| 欧美精品精品一区| 中文字幕亚洲欧洲| 欧美一区二区三区婷婷| 欧美日高清视频| 五月天开心婷婷| 国产精品一区二区精品| 欧美一区二区精美| 日本女人性视频| 136导航精品福利| 亚洲国产精品va在线| 中文字幕乱码一区| 亚洲精品小区久久久久久| 日韩精品视频在线免费观看| 久久成人激情视频| 成人羞羞网站| 久久精品中文字幕电影| 欧美成人精品一区二区免费看片| 亚洲先锋成人| 欧美在线视频观看免费网站| 波多野结衣电车| 精久久久久久久久久久| 99久热re在线精品996热视频| 99这里有精品视频| gogogo免费视频观看亚洲一| 欧美一区视久久| 在线观看av黄网站永久| 亚洲免费观看高清完整版在线观看 | 91理论片午午论夜理片久久| 性生活视频软件| 99久久免费视频.com| 日本10禁啪啪无遮挡免费一区二区 | 成人动漫精品一区二区| 欧美日韩综合另类| h网站久久久| 欧美性猛交xxxx乱大交| 日本人69视频| 欧美男人操女人视频| 中日韩美女免费视频网址在线观看 | 国产免费不卡视频| 91在线云播放| 伊人精品久久久久7777| 91桃色在线| 欧美日韩一区二区电影| 国产+高潮+白浆+无码| 少妇精品久久久一区二区| 美女黄色丝袜一区| 国产乱国产乱老熟| 国产精品乡下勾搭老头1| 欧美激情视频一区二区三区| 99在线视频观看| 91九色最新地址| 国产成人精品一区二区三区在线观看| 男男gay无套免费视频欧美| 色综合久久88| 黄色大全在线观看| 99国内精品久久| 秋霞在线一区二区| 日本综合视频| 日韩电影第一页| 欧美成人精品欧美一| 奇米影视7777精品一区二区| 久久99国产精品| 黄a在线观看| 色av一区二区| 在线观看亚洲免费视频| 亚洲澳门在线| 国产精品美女www爽爽爽视频| 五十路在线观看| 亚洲一卡二卡三卡四卡无卡久久| 中文字幕色网站| 日本一区二区在线看| 欧美在线视频免费| 无码国产精品一区二区色情男同| 亚洲影院在线观看| 在线能看的av网站| 日本大胆欧美| 国产精品久久久久久久av大片| 日韩有码电影| 天天综合网 天天综合色| 午夜性福利视频| 91成人精品视频| 国产日韩欧美中文在线播放| 岛国在线大片| 欧美熟乱第一页| 亚洲av无码国产精品麻豆天美| 国产欧美日本| 久久99精品久久久久久三级| 国产传媒在线观看| 亚洲国产欧美一区二区丝袜黑人| 久久久久97国产| 国产成人午夜精品5599 | 精品人妻中文无码av在线| 国产亚洲精品久久久久婷婷瑜伽| 激情五月综合色婷婷一区二区| 99在线视频影院| 日韩精品在线免费观看| 日韩精品在线免费视频| 久久新电视剧免费观看| 男人揉女人奶房视频60分| 亚洲+变态+欧美+另类+精品| 26uuu亚洲伊人春色| 午夜影院免费体验区| 欧美色视频日本高清在线观看| 亚洲成人av免费在线观看| 99精品久久| 欧美成熟毛茸茸复古| 韩国成人动漫| 中文字幕日韩电影| 国产精品色综合| 亚洲一区二区三区在线| 人妻av一区二区| 欧美亚洲一区| 涩涩日韩在线| 精品国产第一国产综合精品| 欧美日韩成人在线视频| 天堂资源中文在线| 一个色综合网| www久久99| 涩涩网在线视频| 国产一区二区三区在线播放免费观看| 中文字幕日韩经典| 一区二区三区四区国产精品| 污污污www精品国产网站| 亚洲欧美日韩综合国产aⅴ| 欧美一级二级三级| 亚洲一区二区三区久久久| 欧美激情啊啊啊| 猫咪在线永久网站| 91精品国产一区二区| 日本高清www免费视频| 国产性天天综合网| 手机看片国产精品| 免费看黄裸体一级大秀欧美| 亚洲人成人77777线观看| 精品一区二区三区中文字幕在线| 69av在线视频| 日本三级视频在线播放| 亚洲第一福利网站| 在线播放一级片| 亚洲一区二区高清| www.4hu95.com四虎| 国产91丝袜在线播放九色| 精品视频无码一区二区三区| 欧美在线高清| 欧美lavv| 成人av动漫| 国产欧美日韩免费| 韩国精品一区| 久久成人国产精品| 国产精品天堂| 亚洲电影中文字幕| 国产一区二区三区视频免费观看| 天天色综合天天| 国产一区二区播放| 中文字幕av一区二区三区高| 日本在线不卡一区二区| 久久精品国产成人一区二区三区 | 新版的欧美在线视频| 久久成人一区二区| jizz在线观看| 日韩精品免费在线视频| 亚洲va欧美va| 欧美精品久久久久久久多人混战| 精品人妻一区二区三区免费看| 亚洲一区二区三区激情| 国产黄色片在线| 久久久久久久久久久99999| 黄色免费视频网站| 国产曰批免费观看久久久| 激情 小说 亚洲 图片: 伦| 亚洲专区一区| 日本天堂免费a| 一区二区日韩欧美| 在线看无码的免费网站| 成人精品中文字幕| 日本一区二区三区四区在线观看| 欧美亚视频在线中文字幕免费| 99影视tv| 成人爽a毛片| 国产不卡一区二区在线观看| 99久久这里有精品| 国产日韩欧美中文在线播放| 国产激情欧美| 国产精品美女主播| 国产精品99| 国产精品永久在线| 日韩成人在线一区| 国产日韩欧美另类| 国产精品3区| 亚洲影院污污.| 欧美影院精品| 99九九视频| 2021年精品国产福利在线| 99re国产| 国产成人一二片| 六月婷婷久久| 国产精品入口久久| 亚欧精品在线| 91青青国产在线观看精品| 大地资源第二页在线观看高清版| 外国成人免费视频| 国产曰肥老太婆无遮挡| 亚洲经典三级| 国产第一页视频| 奇米888四色在线精品| 亚洲午夜精品一区| 国产激情一区二区三区| 喷水视频在线观看| 久久综合九色综合97婷婷女人| 制服 丝袜 综合 日韩 欧美| 国产精品入口麻豆原神| 91高清免费看| 亚洲高清免费视频| 无码人妻丰满熟妇奶水区码| 欧美少妇一区二区| 精品久久国产视频| 精品国内二区三区| 激情小说 在线视频| 精品国产一区二区三区久久久狼| 尤物yw193can在线观看| 4438全国成人免费| 久久91视频| 国产一区二区三区四区五区在线 | 精品国产一区二区三区久久狼黑人 | 一区二区三区成人| 一区二区三区福利视频| 欧美怡红院视频| www.成人免费视频| 亚洲欧美色图片| 国产又粗又猛又爽又黄的| 欧美不卡一二三| 玖玖综合伊人| 欧美国产精品va在线观看| 电影一区二区三| 亚洲自拍欧美色图| 国产成人调教视频在线观看| 四虎4hu永久免费入口| 美女诱惑一区| wwwxxxx在线观看| 欧美激情一区二区在线| 免费人成在线观看| 欧美亚洲图片小说| 欧美 日韩 国产 精品| www.精品av.com| 中文日产幕无线码一区二区| 91精品视频在线免费观看| 亚洲欧洲av| 屁屁影院ccyy国产第一页| 日韩精品成人一区二区三区| 911亚洲精选| 国产精品久久久久久久久久免费看 | 亚洲天堂偷拍| 一女二男3p波多野结衣| eeuss影院一区二区三区| 成人免费视频网站入口::| 欧美性生活一区| 日韩一二三四| 久久久亚洲福利精品午夜| www 久久久| 亚洲国产午夜伦理片大全在线观看网站 | 欧美日韩精品一区二区视频| 日韩精品综合在线| 国产真实精品久久二三区| 夜夜春很很躁夜夜躁| 午夜av电影一区| 亚洲av无码乱码在线观看性色| 中文在线不卡视频| 日韩伦理三区| 久久久久se| 国产欧美日韩一区二区三区在线| 一起草最新网址| 中文字幕日韩av资源站| 欧美日韩 一区二区三区| 亚洲男人天堂2023| 国产精品vvv| 国产呦系列欧美呦日韩呦| 好吊一区二区三区| 韩国黄色一级片| 亚洲免费在线观看视频| 国产黄色免费大片| 久久久国产精彩视频美女艺术照福利| 国精品产品一区| 亚洲欧美成人一区| 蜜臀久久久久久久| 亚洲精品成人av久久| 欧日韩精品视频| av在线播放网| 国产精品一区二区三区免费视频 | 亚洲免费看黄网站| 精品人妻伦一二三区久久| 久久精品91久久久久久再现| 欧美少妇激情| 国产精品av免费| 国产又黄又大久久| 人妻久久一区二区| 欧美xfplay| 19禁羞羞电影院在线观看| 精品国产免费久久久久久尖叫| 中文久久精品| 公侵犯人妻一区二区三区| 欧美亚洲高清一区二区三区不卡| 岛国在线视频免费看| 成人午夜在线视频一区| 欧美.www| 黄色网址在线视频| 日韩欧美主播在线| 成年人视频在线看| 亚洲free嫩bbb| 国产亚洲毛片| 国产馆在线观看| 91精品国产综合久久香蕉麻豆| 91极品在线| 精品国产乱码久久久久久郑州公司| 久久精品日韩欧美| 超薄肉色丝袜一二三| 91麻豆精品91久久久久久清纯| 亚洲性图自拍| 久热国产精品视频一区二区三区| 蜜臀精品一区二区三区在线观看| 久久国产波多野结衣| 亚洲国产精品成人精品| 欧美极品免费| 8x8x华人在线| 久久综合网色—综合色88| 一级黄色片视频| 欧美精品久久久久久久久| 国产精品手机在线播放| 亚洲图片 自拍偷拍| 精品欧美国产一区二区三区| 99riav在线| 国产日韩精品推荐| 蜜臀va亚洲va欧美va天堂| 国产午夜激情视频| 最近2019中文字幕第三页视频| 97人人澡人人爽91综合色| 日韩精品免费播放| 一区二区三区中文字幕| 韩国三级av在线免费观看| 18成人在线| 全部av―极品视觉盛宴亚洲| www.youjizz.com亚洲| 一本大道久久加勒比香蕉| 97成人在线| 在线观看免费的av| 偷拍日韩校园综合在线| 黄色精品在线观看| 欧洲精品久久| 成人99免费视频| 99国产精品99| 国产国语videosex另类| 亚洲精品男同|