您的位置:首页 > 其它

二维矩阵相乘的串行和并行实现

2011-06-09 10:05 387 查看
通常的二维矩阵相乘的串行算法实现很常见,如下:

int m;//column of the Matrix
int A[][]; int B[][]; //two matrix used to do the multiplication
int C[][]; //used to strore the final result
int D[][][];//used to store the intermediate result

//通常矩阵相乘的实现算法
for (int k = 0 ; k < m ; k++)
{
for (int i = 0 ; i < m ; i ++)
{
for (int j = 0 ; j < m ; j ++)
{
C[i][j] += A[i][k] * B[k][j];
}
}
}

就是一个三重的for循环;

并行实现的思想如下:

临时三维矩阵Dk, i, j=Ai, k * Bk, j
第一步骤:8个Dk, i, j的计算,
第二步骤:D*, i, j相加,Ci, j:

实现如下:

int m;//column of the Matrix
int A[][]; int B[][]; //two matrix used to do the multiplication
int C[][]; //used to strore the final result
int D[][][];//used to store the intermediate result

//Step1 其中m为矩阵的列数
for (int k = 0 ; k < m ; k ++)
{
for (int i = 0 ; i < m ; i ++)
{
for (int j = 0 ; j < m ; j ++)
{
D[k][i][j] = A[i][k] * B[k][j];
}
}
}

//step2 中间结果相加构成最后结果
for (int k = 0 ; k < m ; k ++)
{
for (int i = 0 ; i < m ; i ++)
{
for (int j = 0 ; j < m ; j++)
{
C[i][j] += D[k][i][j];
}
}
}

之后可以通过多线程等方法实现矩阵相乘的并行运算。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: