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


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 Применяется только к 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

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

  • предложение 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