Возможно ли присвоение имен переменным для критической директивы в openmp? - PullRequest
0 голосов
/ 07 февраля 2020

Я хочу запустить следующее l oop для параллельного подсчета элементов. Поскольку count[j] обновляется только итерациями, где (X[i] / exp) % 10 оценивается как j, я хочу определить разные критические секции для каждого из них. Сначала я подумал об использовании предложения сокращения для каждого элемента массива, но это дало ошибку компиляции. Я знаю, что этот код неверен, но как мне реализовать такие вещи?

#pragma omp parallel for
    for (i = 0; i < n; i++)
        #pragma omp critical((X[i] / exp) % 10)
        count[(X[i] / exp) % 10]++;

1 Ответ

0 голосов
/ 10 февраля 2020

Для чего-то подобного, когда происходит одно обновление, нормальным решением является использование атома c.

#pragma omp atomic
count[(X[i] / exp) % 10]++;

В качестве альтернативы вы можете использовать сокращение OpenMP для всего массива, см. Пример сокращения. 7. c на стр. 238 из Примеры OpenMP 4.5

...