矩阵分块乘法

矩阵分块乘法
通常可以把一个矩阵分成多个块, 例如,

 (6-4)

可以将其划分为 4个块:
  

 (6-5)

  

 (6-6)

分块后的矩阵记为:

(6-7)
分块矩阵乘法如下所示:

(6-7)

划分不一定需要完全等间隔, 只需要满足子矩阵乘法规则即可, 如图6-27所示。
图6-27 子矩阵划分不一定需要完全等间隔, 只需要满足子矩阵乘法规则
给定一个的矩阵切分为 行 列。

 (6-8)

另一个的矩阵切分为行列。

 (6-9)

则它们的乘积计算如下:

 (6-10)

相应的乘法循环,代码如下。
for (int m = 0; m < M; m += Mtile)                //在M维上迭代
    for (int n = 0; n < N; n += Ntile)            //在N维上迭代
        for (int k = 0; k < K; ++k)
            for (int i = 0; i < Mtile; ++i)       // 计算一个图块 
                for (int j = 0; j < Ntile; ++j) {
                    int row = m + i;
                    int col = n + j;
                    C[row][col] += A[row][k] * B[k][col];
                }
 
posted @ 2024-10-07 11:49  吴建明wujianming  阅读(77)  评论(1编辑  收藏  举报