Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой главе описываются переменные среды среды 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"
DOS:
set OMP_SCHEDULE="dynamic"
4.1 OMP_SCHEDULE
OMP_SCHEDULE применяется только к директивам forparallel 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
Перекрестные ссылки
- предложение num_threads
- omp_set_num_threads функция
- функция omp_set_dynamic
4.3 OMP_DYNAMIC
Переменная OMP_DYNAMIC среды включает или отключает динамическую корректировку количества потоков, доступных для выполнения параллельных регионов.
OMP_DYNAMIC игнорируется, если динамическая корректировка явно включена или отключена путем вызова подпрограммы библиотеки omp_set_dynamic . Его значение должно быть TRUE или FALSE.
Если OMP_DYNAMIC задано значение TRUE, количество потоков, используемых для выполнения параллельных регионов, может быть скорректировано средой выполнения для оптимального использования системных ресурсов. Если OMP_DYNAMIC задано значение FALSE, динамическая корректировка отключена. Условие по умолчанию определяется реализацией.
Пример:
setenv OMP_DYNAMIC TRUE
Перекрестные ссылки
4.4 OMP_NESTED
Переменная OMP_NESTED среды включает или отключает вложенный параллелизм, если не включен или отключен вложенный параллелизм, вызывая подпрограмму omp_set_nested библиотеки. Если OMP_NESTED имеет значение TRUE, вложенный параллелизм включен. Если OMP_NESTED задано значение FALSE, вложенный параллелизм отключен. Значение по умолчанию — FALSE.
Пример:
setenv OMP_NESTED TRUE
Перекрёстная ссылка
- omp_set_nested функция