omp parallel不会给矩阵乘法带来任何性能提升

时间:2015-03-28 10:59:07

标签: concurrency parallel-processing openmp concurrent-programming shared-resource

我使用以下2个代码块来串行和并行计算矩阵乘法。

序列号 -

double** ary1 = new double*[in];
double** ary2 = new double*[in];
double** result = new double*[in];
for (int i=0;i<in;i++){
    for (int j=0;j<in;j++){
        result[i][j] = 0;
        for(int k = 0;k<in; k++){
            result[i][j] += ary1[i][k]*ary2[k][j];
        }
    }
}

平行 -

double** ary1 = new double*[in];
double** ary2 = new double*[in];
double** resultsP = new double*[in];
#pragma omp parallel for 
for(int i=0;i<size;i++){
  int raw = i/in;
  int column = i%in;
  double sum =0;
  for(int k = 0; k < in; k++){
       resultsP[raw][column] += ary1[raw][k]*ary2[k][column];
  }
  resultsP[raw][column] = sum;
}

我在四核计算机上运行,​​但得到相同的结果。 为什么我不能通过运行这个parrellely来提高性能? 在parellel循环中访问ary1,ary2,resultsP共享数组会导致它们串行运行吗?

1 个答案:

答案 0 :(得分:0)

这是因为&#39; -fopenmp&#39;编译代码时不包含标志。通过添加问题解决了问题。