Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
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
Действия, соответствующие директиве применяются
непосредственно к структурному блоку, расположенному за
директивой. Структурным блоком может быть любой оператор,
имеющий единственный вход и единственный выход.
Если директива расположена на файловом уровне видимости, то
она применяется ко всему файлу.
Дата публикования: 2015-01-13; Прочитано: 461 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!