omp параллель не дает увеличения производительности для умножения матриц
Я использую следующие 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 внутри цикла parellel их последовательный запуск?
1 ответ
Решение
Это произошло, поскольку флаг -fopenmp не был включен при компиляции кода. Проблема была решена путем добавления.