OpenMP для цикла с мастер-областью: «мастер-область не может быть тесно вложена внутри рабочей области или явной области задач» - PullRequest
6 голосов
/ 16 февраля 2012

У меня есть следующий код, который, я считаю, должен отображать индикатор выполнения, приблизительно равный прогрессу всего процесса (поскольку каждый параллельный поток цикла должен развиваться примерно с одинаковой скоростью)Однако я получаю следующую ошибку:

warning: master region may not be closely nested inside of work-sharing or explicit task region [enabled by default]

Теперь, когда я запускаю код, я получаю желаемый результат.Но я не люблю предупреждения.Почему это дает мне предупреждение и есть ли лучший способ сделать это?

Спасибо!

1 Ответ

7 голосов
/ 17 февраля 2012

Он предупреждает вас, потому что мастер-область не может быть тесно вложена в рабочую, атомарную или явную область задач.

#pragma omp master - это мастер-регион, как следует из названия, и #pragma omp parallel forявляется областью совместного использования задач.

Они тесно вложены, потому что ни один вызов функции или оператор не разделяет их.

Чтобы избежать предупреждения, замените #pragma omp master на что-то вроде

tid = omp_get_thread_num();
if(tid == 0)
{
   progress_bar(x*omp_get_num_threads());
}

согласно примеру здесь .

См. Руководство по OpenMP: простое многопоточное программирование для C ++ для получения дополнительной информации и примеров.

Для получения дополнительной информации см. Спецификацию OpenMP или см. Документация Intel о неправильном вложении конструкций OpenMP .

...