Amdahl定律:矩阵乘法

时间:2013-06-30 08:31:40

标签: parallel-processing matrix-multiplication eigen parallelism-amdahl

我正在尝试计算可以并行化的代码的分数P,以应用Amdahl定律并观察理论上的最大加速。

我的代码大部分时间都花在乘法矩阵上(使用库Eigen)。我应该认为这部分完全可以并行吗?

2 个答案:

答案 0 :(得分:0)

如果您的矩阵足够大,假设大于60,那么您可以在启用OpenMP的情况下进行编译(例如,-fopenmp with gcc),并且产品将为您并行化。但是,通常最好在最高级别进行并行化,尤其是在矩阵不是很大的情况下。那么这取决于您是否可以在算法中识别独立任务。

答案 1 :(得分:0)

首先,考虑特征库如何处理矩阵乘法是合适的。

然后,没有Eigen的矩阵(mxn) - 矢量(nx1)乘法可以这样写:

1  void mxv(int m, int n, double* a, double* b, double* c)
2  { //a=bxc
3    int i, j;
4
5    for (i=0; i<m; i++)
6    {
7      a[i] = 0.0;
8      for (j=0; j<n; j++)
9        a[i] += b[i*n+j]*c[j];
10   }
11 }

正如您所看到的,因为没有两个产品计算结果向量a []的相同元素,并且因为计算i = 0 ... m的元素a [i]的值的顺序不影响答案的正确性,这些计算可以在i的索引值上独立进行。

然后像前一个循环完全可并行化。在这样的循环中使用OpenMP进行并行实现是相对简单的。