omp parallel 不会为矩阵乘法带来任何性能提升
omp parallel doesn't give any performance increase for matrix multiplication
我正在使用以下 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;
}
我运行都是四核电脑,但是得到的结果是一样的。
为什么我没有通过 运行 并行地提高性能?
在 parellel 循环中访问 ary1、ary2、resultsP 共享数组是否会导致它们串行 运行?
这是因为编译代码时没有包含“-fopenmp”标志。添加后问题解决。
我正在使用以下 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;
}
我运行都是四核电脑,但是得到的结果是一样的。 为什么我没有通过 运行 并行地提高性能? 在 parellel 循环中访问 ary1、ary2、resultsP 共享数组是否会导致它们串行 运行?
这是因为编译代码时没有包含“-fopenmp”标志。添加后问题解决。