如何使用OpenMP将此矩阵乘以矢量运算并行化?

时间:2018-10-27 15:44:33

标签: c++ openmp

我尝试在下面的代码中并行化for循环,但是我不确定应该在for循环之前添加哪种类型的OpenMP指令,是否需要先在私有或公共声明这些变量?

 #include <stdio.h>
 #include <time.h>
 #include <omp.h>

 void mxv_row(int m, int n, double *A, double *B, double *C)
 {
 int i, j;
 # pragma omp parallel private(?)shared (?)
 for (i=0; i<m; i++)
 # pragma omp for
 {
 A[i] = 0.0;
 for (j=0; j<n; j++)
 A[i] += B[i*n+j]*C[j];
 }
 }

1 个答案:

答案 0 :(得分:0)

正如您在循环外声明j一样,它应该是私有的。如果您在第二个for循环中声明它,那就没问题了。

其余部分可以共享(i除外,因为它是您的并行循环索引),但不必共享,因为它只是大小和指针。