Параллельные алгоритмы.
Приложение 2.
Описание директив и функций OpenMP

    В этом приложении приведен список и краткое описание директив и функций OpenMP.

Таблица 1. Сводный перечень директив OpenMP
Директива Описание
parallel [<параметр>...] Директива определения параллельного фрагмента в коде программы. Параметры: if, private, shared, default, firstprivate, reduction, copyin, num_threads
for [<параметр>...] Директива распараллеливания циклов. Параметры: private, firstprivate, lastprivate, reduction, ordered, nowait, schedule
sections [<параметр>...] Директива для выделения программного кода, который далее будет разделен на параллельно выполняемые параллельные секции. Выделение параллельных секций осуществляется при помощи директивы section. Параметры: private, firstprivate, lastprivate, reduction, nowait
section Директива выделения параллельных секций - должна располагаться в блоке директивы sections.
single [<параметр>...] Директива для выделения программного кода в параллельном фрагменте, исполняемого только одним потоком. Параметры: private, firstprivate, copyprivate, nowait
parallel for [<параметр>...] Объединенная форма директив parallel и for. Параметры: private, firstprivate, lastprivate, shared, default, reduction, ordered, schedule, copyin, if, num_threads
parallel sections [<параметр>...] Объединенная форма директив parallel и sections. Параметры: private, firstprivate, lastprivate, shared, default, reduction, copyin, if, num_threads
master Директива для выделения программного кода в параллельном фрагменте, исполняемого только основным (master) потоком
critical [(name)] Директива для определения критических секций
barrier Директива для барьерной синхронизации потоков
atomic Директива для определения атомарной (неделимой) операции
flush [list] Директива для синхронизации состояния памяти
threadprivate (list) Директива для определения постоянных локальных переменных потоков
ordered Директивы управления порядком вычислений в распараллеливаемом цикле. При использовании данной директивы в директиве for должен быть указан одноименный параметр ordered

Таблица 2. Сводный перечень параметров директив OpenMP
Параметр Описание
private (list) Параметр для создания локальных копий для перечисленных в списке переменных для каждого имеющегося потока. Исходные значения копий не определены. Директивы: parallel, for, sections, single
firstprivate (list) Тоже что и параметр private и дополнительно инициализация создаваемых копий значениями, которые имели перечисленные в списке переменные перед началом параллельного фрагмента. Директивы: parallel, for, sections, single
lastprivate (list) Тоже что и параметр private и дополнительно запоминание значений локальных переменных после завершения параллельного фрагмента. Директивы: for, sections
shared (list) Параметр для определения общих переменных для всех имеющихся потоков. Директивы: parallel
default (shared | none) Параметр для установки правила по умолчанию на использование переменных в потоках. Директивы: parallel
reduction (operator: list) Параметр для задания операции редукции. Директивы: parallel, for, sections
nowait Параметр для отмены синхронизации при завершении директивы. Директивы: for, sections, single
if (expression) Параметр для задания условия, только при выполнении которого осуществляется создание параллельного фрагмента. Директивы: parallel
ordered Параметр для задания порядка вычислений в распараллеливаемом цикле. Директивы: for
schedule (type [, chunk]) Параметр для управления распределением итераций распараллеливаемого цикла между потоками. Директивы: for
copyin (list) Параметр для инициализации постоянных переменных потоков. Директивы: parallel
copyprivate (list) Копирование локальных переменных потоков после выполнения блока директивы single. Директивы: single
num_treads Параметр для задания количества создаваемых потоков в параллельной области. Директивы: parallel

Таблица 3. Сводный перечень функций OpenMP
Функция Описание
void omp_set_num_threads (int num_threads); Установить количество создаваемых потоков
int omp_get_max_threads (void); Получение максимально возможного количества потоков
int omp_get_num_threads (void); Получение количества потоков в параллельной области программы
int omp_get_thread_num (void); Получение номера потока
int omp_get_num_procs (void); Получение числа вычислительных элементов (процессоров или ядер), доступных приложению
void omp_set_dynamic (int dynamic); Установить режим динамического создания потоков
int omp_get_dynamic (void); Получение состояние динамического режима
void omp_set_nested (int nested); Установить режим поддержки вложенных параллельных фрагментов
int omp_get_nested (void); Получения состояние режима поддержки вложенных параллельных фрагментов
void omp_init_lock (omp_lock_t *lock);
void omp_init_nest_lock (omp_nest_lock_t *lock);
Инициализировать замок
void omp_set_lock (omp_lock_t &lock);
void omp_set_nest_lock (omp_nest_lock_t &lock);
Установить замок
void omp_unset_lock (omp_lock_t &lock);
void omp_unset_nest_lock (omp_nest_lock_t &lock);
Освободить замок
int omp_test_lock (omp_lock_t &lock);
int omp_test_nest_lock (omp_nest_lock_t &lock);
Установить замок без блокировки
void omp_destroy_lock (omp_lock_t &lock);
void omp_destroy_nest_lock (omp_nest_lock_t &lock);
Перевод замка в неинициализированное состояние
double omp_get_wtime (void); Получение времени текущего момента выполнения программы
double omp_get_wtick (void); Получение времени в секундах между двумя последовательными показателями времени аппаратного таймера
int omp_in_parallel (void); Проверка нахождения программы в параллельном фрагменте

Таблица 4. Сводный перечень переменных окружения OpenMP
Переменная Описание
OMP_SHEDULE Переменная для задания способа управления распределением итераций распараллеливаемого цикла между потоками. Значение по умолчанию: static
OMP_NUM_THREADS Переменная для задания количество потоков в параллельном фрагменте. Значение по умолчанию: количество вычислительных элементов (процессоров/ядер) в вычислительной системе
OMP_DYNAMIC Переменная для задания динамического режима создания потоков. Значение по умолчанию: false
OMP_NESTED Переменная для задания режима вложенности параллельных фрагментов. Значение по умолчанию: false