【问题标题】:omp parallel doesn't give any performance increase for matrix multiplicationomp parallel 不会为矩阵乘法带来任何性能提升
【发布时间】:2015-06-01 16:54:46
【问题描述】:

我正在使用以下 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;
}

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

【问题讨论】:

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


    【解决方案1】:

    这是因为在编译代码时没有包含“-fopenmp”标志。添加后问题解决了。

    【讨论】:

    • 为了防止将来出现此类错误,我建议使用-Wall 标志进行编译,该标志将显示一些以前隐藏的编译器警告,例如未知#pragmas。
    • 即使您使用 AVX 进行乘法运算,您会获得性能吗?我的问题是,使用 AVX 的元素智能乘法是否有内存限制?
    猜你喜欢
    • 2015-04-03
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2013-09-06
    • 2015-02-03
    • 2021-09-17
    • 1970-01-01
    相关资源
    最近更新 更多