Как бороться с конфликтом в пуле потоков OpenMP - PullRequest
1 голос
/ 22 апреля 2010

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

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

Ответы [ 2 ]

1 голос
/ 04 мая 2011

вы можете использовать omp_set_num_threads (int) для установки no. потоков внутри бассейна. Затем компилятор попытается создать пул потоков, если это возможно, и запланировать их. если невозможно создать пул, он создаст как можно больше потоков и будет запускать другие последовательно.

для получения дополнительной информации попробуйте эту ссылку

0 голосов
/ 22 апреля 2010

Вы можете делать то, что хотите, умно используя выражения omp_get_num_threads, omp_set_num_threads и if и num_threads в директивах parallel. OpenMP 3.0 также предоставляет tasks, что может быть полезно.

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