установить номер потока OMP для внешней DLL - PullRequest
1 голос
/ 04 мая 2019

Мы импортировали стороннюю динамическую библиотеку в нашем процессе, которая использует OpenMP для внутреннего использования.Мы хотим ограничить количество параллельных потоков одним для этой DLL, и не затрагивать другой потенциальный OMP-код вне DLL.В соответствии с документацией Intel он имеет два способа:

  1. Установить переменную среды OMP_NUM_THREADS.
  2. Вызов omp_set_num_threads () во время выполнения.

Первый способ явно влияет на все в моем процессе.Хотя я не уверен, может ли второй способ повлиять на настройку OMP для ограниченной DLL?Это не ясно указано в документации.

1 Ответ

0 голосов
/ 04 мая 2019

Обычное правило предпочтения для OpenMP - оценивать OMP_NUM_THREADS, когда запускается среда выполнения OpenMP и до того, как она создаст первые потоки.Эффект omp_set_num_threads() зависит от того, где он вызывается.

Если вызов выполняется из последовательной области, то он влияет на параллельную область next , с которой можно столкнуться (если только эта областьиспользует предложение num_threads для установки другого числа).Если вызов выполняется из параллельной области, то эффект действует только для вызывающего потока и будет влиять на вложенную параллельную область, с которой сталкивается этот поток (опять же, нет условия num_threads для этой области плюс OMP_NESTED=true).

Итак, если вы хотите избежать параллелизма для вызываемых функций DLL, вы должны вызывать omp_set_num_threads(1) перед каждым вызовом функций DLL и восстанавливать предыдущее значение после возврата вызова.

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