OpenMP параллель 'for' не работает должным образом - PullRequest
1 голос
/ 19 июня 2019

Следующий фрагмент взят из одной из функций моего кода:

static int i;

#pragma omp parallel for default(shared) private(i) schedule(static,1)
for (i=0; i<ttm_ic_last; i++)
{
    static int ni, ni1, ni2;
    static double ni_ratio;
    static double temp_e, temp_l;
    ...
}

Странно, что когда я комментирую строку, начинающуюся с #pragma, она работает правильно, иначе цикл не соприкасается схотя бы некоторые из предполагаемых значений i.(Я не уверен, является ли «touch» правильным глаголом здесь.)

Я использую рабочую станцию ​​с

gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4)

Интересно, что может быть причиной этой ошибки.

1 Ответ

1 голос
/ 20 июня 2019

(Ответ Стефана)

Не используйте static переменные, когда задействованы потоки OpenMP.

Дело в том; со статикой они имеют общее пространство памяти. Таким образом, они могут мешать друг другу через потоки. Все ваши параллельные петли смотрят внутрь одного блока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...