现在的位置: 首页 > 综合 > 正文

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

2013年12月12日 ⁄ 综合 ⁄ 共 841字 ⁄ 字号 评论关闭

通常的二维矩阵相乘的串行算法实现很常见,如下:

  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];
    }
   }
  }

之后可以通过多线程等方法实现矩阵相乘的并行运算。

 

抱歉!评论已关闭.