9 / 20 · 概念
輸出駐留與其他資料流
辨識留在 PE 內的數值,比較儲存與傳輸。
單元可免費閱讀,註冊課程即可儲存學習進度。
確認哪個數值留在本地
脈動陣列讓運算元穿過相鄰處理單元,同時執行平行工作。「駐留」描述運算期間,為了重用而保留在附近的值。即使數學操作相同,不同選擇仍會改變 PE 暫存器、部分和路徑與邊界排程。
本課的輸出駐留設計中,PE(i,j) 保留 C(i,j) 的部分和。k 前進時 A 與 B 移動。全部 K 項到達後收集結果;clear 開始新的輸出分塊。A 值沿列重用,B 值沿欄重用。2×2 範例中,A(0,0)=1 同時貢獻至 C(0,0) 與 C(0,1)。
權重駐留設計將 B 等權重預載入 PE,並在傳入活化值之間重用。部分和必須移動或在其他位置收集。重新命名埠不會將 OS 控制器變成 WS:儲存的值、預載順序與結果路徑都改變。輸入駐留設計保留活化值,以在權重或輸出計算間重用。此處比較該概念,不實作 IS 陣列。
| 資料流 | 保留值 | 要檢視的成本 |
|---|---|---|
| OS | 輸出部分和 | 寬位元累加器與結果收集 |
| WS | 權重 | 預載與部分和傳輸/儲存 |
| IS | 活化值 | 權重供應與輸出總和合併 |
分開三種流量量測
考慮共用相同 B 的兩個 2×2 乘積。我們的 OS 邊界模型每項工作提供四個 A 與四個 B 值:兩項工作共十六個運算元值。本地 B 緩衝器可避免第二項工作重新從外部記憶體讀取 B,但仍須供應四個邊界權杖。權重預載重用提供不同取捨,並需要不同的部分和路徑。
外部讀取、邊界注入與 PE 間傳輸是不同量測。UC Berkeley Gemmini README 提供可設定 OS 與 WS 資料流的第一手範例。我們的學習陣列有自己的契約,不重現 Gemmini 的實作或指令介面。
設計審查時,辨識哪些值保留在本地、總和在哪裡累加,以及哪些值跨越各邊界。只有重用,不保證記憶體埠足夠或可持續維持吞吐量。
自己試試看
兩個 2×2 工作共用保留於本地緩衝器的 B。A 不重用。需要多少外部運算元讀取與 OS 邊界注入?
查看解說
外部讀取共 12 個值:兩個各四值的 A 矩陣,加上一個四值 B 矩陣。邊界注入共 16 個值:每項工作四個 A 加四個 B。不含結果寫入與內部轉送。