1 / 20 · 概念
將內積映射至處理單元
區分列、欄與歸約索引,並計算小型參考矩陣。
單元可免費閱讀,註冊課程即可儲存學習進度。
排程前先確立運算
設 A 的形狀為 M×K,B 的形狀為 K×P。乘積 C 的形狀為 M×P。索引 i 選擇輸出列,j 選擇輸出欄,k 則是加總內的歸約索引。本課程所有索引都從零開始。
我們的輸出駐留設計,將 C(i,j) 分配至 PE(i,j)。該處理單元保留部分和,而 A 向右移動、B 向下移動。移動讓資料可以重用;方程式則訂定哪些運算元可以相乘。我們會另外定義時脈時序,讓排程錯誤無法悄悄改變預期的數學運算。
計算完整參考範例
使用 A=[[1,2],[3,4]] 與 B=[[5,6],[7,8]]。PE(0,1) 將列 [1,2] 與欄 [6,8] 組合。它累加 1×6=6 與 2×8=16,得到 22。若改用 B 的第二列 [7,8],便會得到 23,這是辨識列欄混淆的實用特徵。
| PE | k=0 項 | k=1 項 | 結果 |
|---|---|---|---|
| (0,0) | 5 | 14 | 19 |
| (0,1) | 6 | 16 | 22 |
| (1,0) | 15 | 28 | 43 |
| (1,1) | 18 | 32 | 50 |
預期矩陣為 [[19,22],[43,50]]。每個 PE 執行兩次有效 MAC,因此陣列共執行八次 MAC。若按一個乘法與一個加法分別計數,便會回報十六次算術操作。比較吞吐量時,務必標示單位。
將座標連接至儲存位置
在列優先儲存中,A(i,k) 的元素偏移量是 iK+k,B(k,j) 則是 kP+j。在此範例的欄 j=1,B 使用偏移量 1 與 3。因此,以連續列提供資料的記憶體介面,需要緩衝或重排,才能將各欄提供至陣列頂端。
以寬位元整數建立算術參考,再於之後套用所選輸出轉換。這些小正數輸入並沒有測試溢位。後續測試必須加入負值、最負的運算元,以及更長的歸約。若 B 是單位矩陣,結果應重現 A;A 的某一列若全為零,C 的對應列也應全為零。除了最終總和,也要記錄每個 PE 的 k 項清單:即使兩個錯誤在數值上互相抵銷,仍可看出遺漏或重複的項。
自己試試看
對 A=[[2,-1],[0,3]] 與 B=[[4,5],[-2,1]],求 C、MAC 次數,以及 B(1,0) 的列優先元素偏移量。
查看解說
C=[[10,9],[-6,3]]:四個總和分別為 8+2、10−1、0−6 與 0+3。共有 2×2×2=8 次 MAC。B(1,0) 的元素偏移量為 1×2+0=2。