Поделиться через


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"

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

Перекрестные ссылки

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

Перекрёстная ссылка