4. Переменные среды
В этой главе описываются переменные среды среды API OpenMP C и C++ (или аналогичные механизмы, зависящие от платформы), которые управляют выполнением параллельного кода. Имена переменных среды должны быть прописными. Значения, назначенные им, являются нечувствительными к регистру и могут иметь начальный и конечный пробел. Изменения значений после запуска программы игнорируются.
Переменные среды приведены следующим образом:
- OMP_SCHEDULE задает тип расписания выполнения и размер блока.
- OMP_NUM_THREADS задает количество потоков, используемых во время выполнения.
- OMP_DYNAMIC включает или отключает динамическую корректировку количества потоков.
- OMP_NESTED включает или отключает вложенный параллелизм.
В примерах в этой главе показано, как эти переменные могут быть заданы в средах оболочки Unix C (csh). В оболочке Korn и средах DOS действия аналогичны:
csh:
setenv OMP_SCHEDULE "dynamic"
ksh:
export OMP_SCHEDULE="dynamic"
ДОС:
set OMP_SCHEDULE="dynamic"
4.1 OMP_SCHEDULE
OMP_SCHEDULE
Применяется только к for
директивам parallel for
, имеющим тип runtime
расписания. Тип расписания и размер блока для всех таких циклов можно задать во время выполнения. Задайте для этой переменной среды любой распознанный тип расписания и необязательный chunk_size.
Для for
и parallel for
директив, имеющих тип расписания, отличный от runtime
типа, OMP_SCHEDULE
игнорируется. Значение по умолчанию для этой переменной среды определяется реализацией. Если задан необязательный chunk_size , значение должно быть положительным. Если chunk_size не задано, предполагается значение 1, за исключением случаев, когда расписание равно static
. static
Для расписания размер блока по умолчанию присваивается пространству итерации цикла, разделенному на количество потоков, примененных к циклу.
Пример:
setenv OMP_SCHEDULE "guided,4"
setenv OMP_SCHEDULE "dynamic"
Перекрестные ссылки
4.2 OMP_NUM_THREADS
Переменная OMP_NUM_THREADS
среды задает количество потоков по умолчанию для использования во время выполнения. OMP_NUM_THREADS
игнорируется, если это число явно изменяется путем вызова подпрограммы библиотеки omp_set_num_threads
. Он также игнорируется, если в директиве parallel
есть явное num_threads
предложение.
Значение переменной OMP_NUM_THREADS
среды должно быть положительным целым числом. Его влияние зависит от того, включена ли динамическая корректировка количества потоков. Полный набор правил взаимодействия между переменной OMP_NUM_THREADS
среды и динамической корректировкой потоков см . в разделе 2.3.
Число используемых потоков определяется реализацией, если:
OMP_NUM_THREADS
Переменная среды не указана,- указанное значение не является положительным целым числом или
- значение больше максимального количества потоков, которые может поддерживать система.
Пример:
setenv OMP_NUM_THREADS 16
Перекрестные ссылки
4.3 OMP_DYNAMIC
Переменная OMP_DYNAMIC
среды включает или отключает динамическую корректировку количества потоков, доступных для выполнения параллельных регионов. OMP_DYNAMIC
игнорируется, если динамическая корректировка явно включена или отключена путем вызова подпрограммы библиотеки omp_set_dynamic
. Его значение должно быть TRUE
или FALSE
.
Если OMP_DYNAMIC
задано значение TRUE
, количество потоков, используемых для выполнения параллельных регионов, может быть скорректировано средой выполнения для оптимального использования системных ресурсов. Если OMP_DYNAMIC
задано значение FALSE
, динамическая корректировка отключена. Условие по умолчанию определяется реализацией.
Пример:
setenv OMP_DYNAMIC TRUE
Перекрестные ссылки
- Параллельные регионы
- функция omp_set_dynamic
4.4 OMP_NESTED
Переменная OMP_NESTED
среды включает или отключает вложенный параллелизм, если не включен или отключен вложенный параллелизм, вызывая подпрограмму omp_set_nested
библиотеки. Если OMP_NESTED
задано значение TRUE
, вложенная параллелизм включена. Если OMP_NESTED
задано значение FALSE
, вложенный параллелизм отключен. Значение по умолчанию — FALSE
.
Пример:
setenv OMP_NESTED TRUE