Технология OpenMP позволяет гибко управлять режимом выполнения многонитевой программы с помощью переменных окружения оболочки SHELL. В текущей версии OpenMP используется четыре переменные.
OMP_DYNAMIC - разрешает или запрещает динамическое изменение числа нитей.
setenv OMP_DINAMIC "TRUE" [csh, tcsh]
export OMP_DINAMIC="TRUE" [sh, ksh, bash]
OMP_NUM_THREADS - устанавливает число нитей при исполнении параллельных областей приложения. Если разрешено динамическое изменение числа нитей, то эта переменная определяет максимальное число нитей.
setenv OMP_NUM_THREADS 16 [csh, tcsh]
export OMP_NUM_THREADS=16 [sh, ksh, bash]
OMP_SCHEDULE - определяет способ распределения итераций в цикле, если в директиве DO/for используется ключ SCHEDULE(RUNTIME).
setenv OMP_SCHEDULE "GUIDED,4" [csh, tcsh]
export OMP_SCHEDULE="GUIDED,4" [sh, ksh, bash]
OMP_NESTED - разрешает или запрещает вложенный параллелизм.
setenv OMP_NESTED "TRUE" [csh, tcsh]
export OMP_NRSTED="TRUE" [sh, ksh, bash]
Изменить значение переменной OMP_NESTED можно с помощью вызова функции omp_set_nested().
C/C++:
void omp_set_nested(int nested)
Fortran:
subroutine omp_set_nested(nested)
logical nested
В новом стандарте OpenMP 3.0 добавлено еще 5 новых переменных окружения.
OMP_PROC_BIND - разрешает или запрещает привязку нитей к процессорам. Возможные значения TRUE или FALSE.
OMP_STACKSIZE - определяет размер стека для создаваемых нитей. Например:
export OMP_STACKSIZE=10M
setenv OMP_STACKSIZE 1G
OMP_WAIT_POLICY - определяет поведение нитей в режиме ожидания. Возможные значения ACTIVE и PASSIVE. В режиме ACTIVE продолжают выполняться процессорные циклы, в режиме PASSIVE процессор останавливается.
OMP_MAX_ACTIVE_LEVELS - контролирует максимальное число вложенных активных параллельных секций. Значение этой переменной должно быть целым не отрицательным числом:
setenv OMP_MAX_ACTIVE_LEVELS 2 [csh, tcsh]
export OMP_MAX_ACTIVE_LEVELS=2 [sh, ksh, bash]
OMP_THREAD_LIMIT - устанавливает макмимальное число нитей для всей OpenMP программы.