Лекция: Общая характеристика пакета OpenMP. Последовательные и параллельные участки. Директивы распараллеливания.

OpenMP (Open Multi-Processing) — открытый стандарт для распараллеливания программ на языках C, C++ и Fortran. Описывает совокупность директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с общей памятью.

Ориентирован на многопоточность. OpenMP — гибридный подход, сочетающий возможности автоматического и ручного распараллеливания; Для выражения параллелизма служат директивы компилятору; На данный момент OpenMP поддерживается практически всеми самыми распространенными трансляторами;

 

Ключевыми элементами OpenMP являются:

· конструкции для создания потоков (директива parallel),

· конструкции распределения работы между потоками (директивы DO/for и section),

· конструкции для управления работой с данными (выражения shared и private для определения класса памяти переменных),

· конструкции для синхронизации потоков (директивы critical, atomic и barrier),

· процедуры библиотеки поддержки времени выполнения (например, omp_get_thread_num),

· переменные окружения (например, OMP_NUM_THREADS). omp_set_num_threads().

· int omp_get_num_procs() возвращает количество процессоров в системе;

· int omp_get_num_threads() возвращает количество тредов, выполняющих параллельный участок (меняется только на последовательных участках);

· int omp_get_thread_num() возвращает номер вызывающего треда.

Модель выполнения OpenMP приложения:

 

 

#pragma omp directive_name [clause[clause ...]] newline

 

Действия, соответствующие директиве применяются

непосредственно к структурному блоку, расположенному за

директивой. Структурным блоком может быть любой оператор,

имеющий единственный вход и единственный выход.

 

Если директива расположена на файловом уровне видимости, то

она применяется ко всему файлу.

еще рефераты
Еще работы по информатике