Skip to content

Latest commit

 

History

History
187 lines (132 loc) · 11.8 KB

peremennie_okruzheniya.md

File metadata and controls

187 lines (132 loc) · 11.8 KB

Переменные окружения

Название Возможные значения По умолчанию*
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_NUM_THREADS должно быть положительным. Действие переменной зависит от того, допускается динамическое регулирование числа потоков. Если динамическое регулирование запрещено, то значения переменной равно числу потоков, используемых для каждой параллельной области, пока это число явным образом не изменится в течение выполнения путем вызова функции omp_set_num_threads()

Если динамическое регулирование потоков разрешено, значение переменной среды рассматривается как максимальное число потоков, доступных для использования. Значение по умолчанию зависит от реализации.

setenv OMP_NUM_THREADS 8

OMP_SCHEDULE

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

Переменная среды OMP_DYNAMIC разрешает или запрещает динамическое регулирование потоков, доступных для выполенения параллельной области. Значение должно быть TRUE или FALSE.

Если значение переменной установлено в значение TRUE, число потоков, используемых для выполнения параллельной области, может регулироваться средой времени выполнения для лучшего использования ресурсов системы.

Если значение переменной установлено в значение FALSE, динамическое регулирование запрещено. Значение по умолчанию зависит от реализации.

setenv OMP_DYNAMIC TRUE

OMP_NESTED

Переменная среды OMP_NESTED разрешает или запрещает вложенный параллелизм. Если значение переменной установлено в значение TRUE, вложенный параллелизм разрешен; если установлено в значении FALSE, вложенный параллелизм запрещён. Значение по умолчанию равно FALSE.

Если вложенный параллелизм разрешён(OMP_NESTED = TRUE), то каждая нить, в которой встретится описание параллельной области, породит для её выполнения новую группу нитей. Сама породившая нить станет в новой группе нитью-мастером.

setenv OMP_NESTED TRUE

OMP_STACKSIZE

Переменная среды окружения 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

OMP_WAIT_POLICY

Переменная окружения специфицирует поведение потоков при ожидании работы.

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

OMP_MAX_ACTIVE_LEVELS

Значение переменной контролирует максимальное число уровней вложенного параллелизма. Число для переменной окружения должно быть не отрицательным и целочисленным. Однако, число не может быть больше чем поддерживает реализация OpenMP.

OMP_CANCELLATION

Данная переменная среды включает или выключает работу сancel конструкций OpenMP(cancel, cancellation point). По соображением производительности она по умолчанию выставлена в FALSE.

OMP_DISPLAY_ENV

Перменная окружения позволяет отобразить версию номер версии 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

OMP_DEFAULT_DEVICE

Переменная окружения среды устанавливает какое устройство будет использоваться по умолчанию. Значение переменной должно быть не отрицательным целым.