Я только начал работать с OpenMP и нашел его очень удобным, когда дело касается ускорения программы. Я пытаюсь ускорить умножение двух, двухмерных матриц (массивов). Я действительно сделал это успешно со статическими массивами, как это:
omp_set_num_threads(8);
#pragma omp parallel default(shared)
{
#pragma omp for reduction(+:C[:N])
for (int i = 0; i < N; ++i){
for (int j = 0; j <P; ++j){
C[i][j] = 0;
for (int k = 0; k < M; ++k){
C[i][j] += A[i][k] * B[k][j];
}
}
}
}
Однако я сталкиваюсь с некоторыми трудностями при динамической инициализации массива "C" следующим образом:
double **C = new double*[N];
for (int i = 0; i < N; ++i){
C[i] = new double[P];
}
Ошибка, которую выдает компилятор G ++, такова:
error: user defined reduction not found for ‘*C’
Окей, похоже, я не могу использовать конкретный способ для динамических массивов, как мне использовать OpenMP для динамически создаваемых массивов?
РЕДАКТИРОВАТЬ: СПАСИБО
@ Ален Мериго
ДЛЯ УКАЗАНИЯ, ЧТО СНИЖЕНИЕ НЕ НУЖНО
Время выполнения на динамически создаваемом массиве с многопоточностью намного выше, чем без него, что по-прежнему означает, что статический код нельзя использовать для динамических