Altifigence Academy

1 / 20 · 概念

將內積映射至處理單元

區分列、欄與歸約索引,並計算小型參考矩陣。

排程前先確立運算

設 A 的形狀為 M×K,B 的形狀為 K×P。乘積 C 的形狀為 M×P。索引 i 選擇輸出列,j 選擇輸出欄,k 則是加總內的歸約索引。本課程所有索引都從零開始。

Ci,j=∑k=0K−1Ai,kBk,jC_{i,j}=\sum_{k=0}^{K-1} A_{i,k}B_{k,j}

我們的輸出駐留設計,將 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,這是辨識列欄混淆的實用特徵。

PEk=0 項k=1 項結果
(0,0)51419
(0,1)61622
(1,0)152843
(1,1)183250

預期矩陣為 [[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。

此選擇適用於本瀏覽器,隨時可從頁尾變更。