13 / 20 · 概念
分塊與邊界填補
將大矩陣映射至較小網格,處理零填補與輸出遮罩。
單元可免費閱讀,註冊課程即可儲存學習進度。
先分塊輸出空間
N×N 網格以 ceil(M/N)×ceil(P/N) 個空間分塊,處理更大的 M×P 結果。我們的基準設計在各分塊內保留完整歸約 K,並在輸出分塊之間清除。包裝層儲存分塊起點 r0,c0;本地 PE(i,j) 映射至全域 C(r0+i,c0+j)。錯時取決於本地座標。
取 N=2、M=P=K=3。令 A=[[1,2,3],[4,5,6],[7,8,9]],B=[[1,0,2],[0,1,0],[2,0,1]]。乘積為 [[7,2,5],[16,5,14],[25,8,23]]。四個分塊起點是 (0,0)、(0,2)、(2,0)、(2,2)。
填補運算元,遮罩寫入
以有效零權杖供應超出範圍的 A 列與 B 欄。各 PE 仍消費 K 項,保留簡單完成契約。若將填補項改為無效,可能讓部分 count 永遠小於 K。另以遮罩控制結果寫入,避免寫出真實矩陣範圍。
最後分塊使用 A=[[7,8,9],[0,0,0]] 與 B=[[2,0],[0,0],[1,0]]。本地結果為 [[23,0],[0,0]],但只有左上值可寫入 C(2,2)。數值零不會讓超範圍位址變安全。
各分塊使用五個 advance 邊緣,四個依序分塊共二十個,不含 clear、載入與輸出傳輸。網格執行四十八次含填補 MAC;只有二十七次屬於真實 3×3 乘積。
歸約分塊需要保留總和
拆分 K 需要合併同一輸出的部分和。C(0,0)=1×1+2×0+3×2=7,以 K=2+1 拆分為部分和一與六。若在兩次歸約間清除最終累加器,就只剩六。保留累加器,或在其他位置合併寬位元部分和。合併前分別量化各部分,可能不同於完整總和只量化一次。
總整實作先從空間分塊與完整 K 開始。測試單元素邊界、可被 N 整除的維度、只有一個真實輸出的最後分塊、有效填補零與輸出遮罩。參考計分板以全域座標為鍵,讓分塊順序改變不影響預期結果。
自己試試看
3×3 範例的 (0,2) 分塊,輸出遮罩與本地結果各是什麼?K 拆成 2+1 時,C(0,2) 的部分和各是多少?
查看解說
本地結果為 [[5,0],[14,0]],遮罩為 [[1,0],[1,0]]。C(0,2)=1×2+2×0+3×1 的部分和為二與三,合計五。