Использует ли OpenMP повторное использование потоков завершенного раздела для другого? - PullRequest
0 голосов
/ 04 апреля 2019

Предположим, у меня есть настройка OpenMP для запуска нескольких разделов, как показано ниже:

#pragma omp parallel sections
{
  #pragma omp section
  { func a }
  #pragma omp section
  { func b }
}

Теперь предположим, что func b закончил первым, пока func a все еще работает. Использует ли OpenMP потоки, которые использовались в func a для дальнейшего распараллеливания func b ? Если нет, есть ли способ сделать это?

Редактировать: В предыдущем вопросе предполагалось, что ранее использовавшиеся потоки остаются бездействующими. Есть ли способ заставить их работать в еще работающем разделе?

1 Ответ

1 голос
/ 04 апреля 2019

OpenMP не использует свободный поток для дальнейшей параллелизации других section в вашем коде.Если вы хотите улучшить балансировку нагрузки между потоками, вам придется использовать более современный стиль программирования OpenMP, основанный на задачах OpenMP.Готовые к выполнению задачи автоматически выбираются незанятыми потоками, когда поток становится незанятым.

Итак, код будет выглядеть примерно так:

#pragma omp parallel master
{
  #pragma omp task
  { func a }  // func a needs to generate more tasks 
  #pragma omp task
  { func b }  // func b needs to generate more tasks 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...