Означает ли #pragma omp параллельно для num_threads (1), что главный поток выполнит его? - PullRequest
1 голос
/ 05 февраля 2020

Если я запускаю параллельную область с количеством потоков 1, гарантируется ли, что новые потоки не будут запущены (следовательно, не будет служебной нагрузки), и главный поток выполнит эту область?

Другими словами, можем ли мы гарантировать, что этот код будет увеличивать все элементы A:

#pragma omp parallel for num_threads(1)
    for(int i=0; i< 1e6; ++i){
#pragma omp master
        A[i]++;
    }

1 Ответ

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

Цель вашего кода не совсем ясна. Используя комбинированную директиву parallel for, вы начинаете разделять работу между потоками. Затем вы ограничиваете тело l oop главным потоком команды, поэтому разделение работы может не произойти. Это неоднозначно.

Спецификация OpenMP явно обрабатывает эту неоднозначность в Раздел 2.20 . Решение простое: Вы не можете делать это в соответствующей программе .

Основная область не может быть тесно вложена в совместное использование, l oop, atomi c, задача или задача oop регион.

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