OpenMP (C ++): матричное умножение с динамически созданными массивами - PullRequest
1 голос
/ 20 мая 2019

Я только начал работать с 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 для динамически создаваемых массивов?

РЕДАКТИРОВАТЬ: СПАСИБО

@ Ален Мериго

ДЛЯ УКАЗАНИЯ, ЧТО СНИЖЕНИЕ НЕ НУЖНО

Время выполнения на динамически создаваемом массиве с многопоточностью намного выше, чем без него, что по-прежнему означает, что статический код нельзя использовать для динамических

...