Название | Возможные значения | По умолчанию* |
---|---|---|
OMP_NUM_THREADS | неотрицательное целое | 1 или кол-во ядер |
OMP_SCHEDULE | тип планирования [размер] | static |
OMP_DYNAMIC | TRUE FALSE | TRUE |
OMP_NESTED | TRUE FALSE | FALSE |
OMP_STACKSIZE | "размер [B K M G]" | - |
OMP_WAIT_POLICY | ACTIVE PASSIVE | PASSIVE |
OMP_MAX_ACTIVE_LEVELS | неотрицательное целое | - |
OMP_THREAD_LIMIT | неотрицательное целое | 1024 |
OMP_PROC_BIND | TRUE FALSE | FALSE |
OMP_PLACES | порядок размещения | - |
OMP_CANCELLATION | TRUE FALSE | FALSE |
OMP_DISPLAY_ENV | TRUE FALSE VERBOSE | FALSE |
OMP_DEFAULT_DEVICE | неотрицательное целое | - |
Значения по умолчанию зависят от реализации. В таблице приведены чаще встречающиеся значения.
Вывод информации о версии на экран.
#if defined _OPENMP
#define X_OMP_SUPPORT 1
#define X_OMP_DATE _OPENMP
#if X_OMP_DATE == 199710
#define X_OMP_VERSION 100 //1.0
#elif X_OMP_DATE == 200203
#define X_OMP_VERSION 200 //2.0
#elif X_OMP_DATE == 200805
#define X_OMP_VERSION 300 //3.0
#elif X_OMP_DATE == 201107
#define X_OMP_VERSION 310 //3.1
#elif X_OMP_DATE == 201307
#define X_OMP_VERSION 400 //4.0
#endif
#endif
//Или можно применить вывод информации о версии OpenMP
#if defined(_OPENMP)
fprintf(stderr, "OPENMP VERSION = %d\n", _OPENMP);
#endif
Значение переменной среды OMP_NUM_THREADS должно быть положительным. Действие переменной зависит от того, допускается динамическое регулирование числа потоков. Если динамическое регулирование запрещено, то значения переменной равно числу потоков, используемых для каждой параллельной области, пока это число явным образом не изменится в течение выполнения путем вызова функции omp_set_num_threads()
Если динамическое регулирование потоков разрешено, значение переменной среды рассматривается как максимальное число потоков, доступных для использования. Значение по умолчанию зависит от реализации.
setenv OMP_NUM_THREADS 8
OMP_SCHEDULE применяется только к директивам for и parallel for, которые имеют способ планирования runtime. Способ планирования и размер порции для всех такого рода циклов может быть установлен во время исполнения программы путём присвоения переменной среды известных значений, обозначающих способ планирования и значение размера порции если он нужен.
Для директив for и parallel for, которые имеют способ планирования, отличный от runtime, переменная OMP_SCHEDULE игнорируется. Значение по умолчанию зависит от реализации. Если оптимальный размер порции установлен, то значение должно быть положительным. Если размер порции не установлен, то предполагается значение равное 1, за исключением способа планирования static устанавливается равным значению частному от деления числа итераций цикла на число потоков, занятых в выполнении цикла.
setenv OMP_SCHEDULE "guided,4"
setenv OMP_SCHEDULE "dynamic"
Переменная среды OMP_DYNAMIC разрешает или запрещает динамическое регулирование потоков, доступных для выполенения параллельной области. Значение должно быть TRUE или FALSE.
Если значение переменной установлено в значение TRUE, число потоков, используемых для выполнения параллельной области, может регулироваться средой времени выполнения для лучшего использования ресурсов системы.
Если значение переменной установлено в значение FALSE, динамическое регулирование запрещено. Значение по умолчанию зависит от реализации.
setenv OMP_DYNAMIC TRUE
Переменная среды OMP_NESTED разрешает или запрещает вложенный параллелизм. Если значение переменной установлено в значение TRUE, вложенный параллелизм разрешен; если установлено в значении FALSE, вложенный параллелизм запрещён. Значение по умолчанию равно FALSE.
Если вложенный параллелизм разрешён(OMP_NESTED = TRUE), то каждая нить, в которой встретится описание параллельной области, породит для её выполнения новую группу нитей. Сама породившая нить станет в новой группе нитью-мастером.
setenv OMP_NESTED TRUE
Переменная среды окружения OMP_STACKSIZE позволяет установить размер стека для потоков создаваемых OpenMP. Данная переменная принимает следующие формы:
размер | размерB | размерK | размерM | размерG
где размер это положительное целочисленное, которое устанавливает размер стека.
B K M G - специфизирует заданный размер в единицах измерения Байтах(Bytes), Килобайтах(Kilobytes), Мегабайтах(Megabytes) или Гигабайтах(Gigabytes).
По умолчанию размер задается в килобайтах. Пример:
setenv OMP_STACKSIZE 20000
Будет установлен размер стека равный 20000 килобайтам.
Если OMP_STACKSIZE не установлен, он определяется реализацией OpenMP.
setenv OMP_STACKSIZE 2000500B
setenv OMP_STACKSIZE "3000 k "
setenv OMP_STACKSIZE 10M
setenv OMP_STACKSIZE " 10 M "
setenv OMP_STACKSIZE "20 m "
setenv OMP_STACKSIZE " 1G"
setenv OMP_STACKSIZE 20000
Переменная окружения специфицирует поведение потоков при ожидании работы.
ACTIVE ожидающие потоки будут в активном ожидании. Потребление тактов процессора будет продолжаться.
PASSIVE ожидающие потоки могут перейти в режим сна. В данном режиме потоки не расходуют такты процессора.
В реализации компании Intel таймер перехода в режим сна установлен на 200 миллисекундах. Это значит,если параллельные потоки после завершении предыдущей работы в установленное время не получат новую работу, то они должны перейти в режим сна. Этот таймер устанавливается KMP_BLOCKTIME,но эта переменная доступна только в реализации компании Intel.
Примеры установки переменной:
setenv OMP_WAIT_POLICY ACTIVE
setenv OMP_WAIT_POLICY active
setenv OMP_WAIT_POLICY PASSIVE
setenv OMP_WAIT_POLICY passive
Значение переменной контролирует максимальное число уровней вложенного параллелизма. Число для переменной окружения должно быть не отрицательным и целочисленным. Однако, число не может быть больше чем поддерживает реализация OpenMP.
Данная переменная среды включает или выключает работу сancel конструкций OpenMP(cancel, cancellation point). По соображением производительности она по умолчанию выставлена в FALSE.
Перменная окружения позволяет отобразить версию номер версии OpenMP и значения переменных окружения, которые относятся к OpenMP. Данная информация выводится один раз до вызова пользовательских функций способных изменить их значение.
Переменная принимает 3 значение:
TRUE | FALSE | VERBOSE
При установленном значении TRUE специфицирует вывод информации о номере версии OpenMP и значения переменных окружения. VERBOSE отображает переменные которые могут быть изменены производителем. В FALSE не будет выведена информация о переменных окружения. Пример вывода значений:
OPENMP DISPLAY ENVIRONMENT BEGIN
OMP_DISPLAY_ENV='TRUE'
_OPENMP='201106'
OMP_DYNAMIC='FALSE'
OMP_MAX_ACTIVE_LEVELS='5'
OMP_NESTED='FALSE'
OMP_NUM_THREADS='64'
OMP_PLACES='{0,1},{2,3},{4,5},{6,7},{8,9},{10,11},{12,13},
{14,15},{16,17},{18,19},{20,21},{22,23},{24,25},{26,27},
{28,29},{30,31},{32,33},{34,35},{36,37},{38,39},{40,41},
{42,43},{44,45},{46,47},{48,49},{50,51},{52,53},{54,55},
{56,57},{58,59},{60,61},{62,63}'
OMP_PROC_BIND='FALSE'
OMP_SCHEDULE='STATIC,0'
OMP_STACKSIZE='4194304'
OMP_THREAD_LIMIT='64'
OMP_WAIT_POLICY='PASSIVE'
OPENMP DISPLAY ENVIRONMENT END
Пример установки значения:
setenv OMP_DISPLAY_ENV TRUE
Переменная окружения среды устанавливает какое устройство будет использоваться по умолчанию. Значение переменной должно быть не отрицательным целым.