# Tiled Matrix Multiplication 筆記 ## 基本觀念 將大矩陣分成小區塊(tile)進行乘法,可以提升快取記憶體命中率,加速矩陣運算。 以 $4 \times 4$ 矩陣為例,tile size 設為 $2$,則矩陣會被分割為 $2 \times 2$ 的區塊矩陣。 --- ## 矩陣切割範例 矩陣 $A$($4 \times 4$): $$ \begin{bmatrix} A_{00} & A_{01} \\ A_{10} & A_{11} \end{bmatrix} $$ 矩陣 $B$($4 \times 4$): $$ \begin{bmatrix} B_{00} & B_{01} \\ B_{10} & B_{11} \end{bmatrix} $$ 矩陣 $C$($4 \times 4$): $$ \begin{bmatrix} C_{00} & C_{01} \\ C_{10} & C_{11} \end{bmatrix} $$ 其中,每個區塊($\alpha_{xx}$)都是 $2 \times 2$ 小矩陣。 --- ## 區塊矩陣乘法公式($C = A \times B$) | 區塊 $C_{ij}$ | 計算公式 | |---------------|-----------| | $C_{00}$ | $A_{00} \times B_{00} + A_{01} \times B_{10}$ | | $C_{01}$ | $A_{00} \times B_{01} + A_{01} \times B_{11}$ | | $C_{10}$ | $A_{10} \times B_{00} + A_{11} \times B_{10}$ | | $C_{11}$ | $A_{10} \times B_{01} + A_{11} \times B_{11}$ | --- ## 計算公式的邏輯解釋 每個 $C_{ij}$ 是由 A 的 row tile $A_{i,k}$ 與 B 的 column tile $B_{k,j}$ 相乘後加總而來。 公式推廣到N維為: $$ C_{ij}^{T \times T} = \sum_{k} A_{ik}^{T \times T} \cdot B_{kj}^{T \times T} $$ 其中: - $T$:tile size - $i, j, k$:tile 區塊索引(tile row / col) --- ## 邊界處理:無法整除 tile size 的情況 實際矩陣大小 $N \times N$ 常常無法被 tile size $T$ 整除,此時: - 最右邊 / 最下邊的 tile **可能不完整** - 若不處理,會造成記憶體越界(特別在 GPU 上會錯誤) - 常見解法為: - **超出範圍就填 0** - 或者使用 `if` 檢查是否越界才進行計算 --- ### 延伸的公式處理邏輯 當 tile size 不能整除矩陣尺寸時: $$ C_{ij}^{T \times T} = \sum_k A_{ik}^{T \times T} \cdot B_{kj}^{T \times T} \quad \text{其中超出範圍的元素設為 0} $$ 例如: - 若 $i \geq N$ 或 $j \geq N$,則 $C[i][j]$ 不需寫入 - 若 $k \geq N$,則忽略對應 $A[i][k] \cdot B[k][j]$ 的乘積