0

我试图计算可以并行化的代码的分数P,应用Amdahl定律并观察理论最大加速比。Amdahl定律:矩阵乘法

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

回答

0

如果您的矩阵足够大,比如说大于60,那么您可以使用OpenMP进行编译(例如,使用gcc -fopenmp),并且产品将为您并行化。但是,最好尽可能在最高级别进行并行处理,特别是如果矩阵不是很大。那么这取决于您是否可以在算法中识别独立的任务。

0

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

然后,矩阵(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 } 

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

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