OpenMP

OpenMP

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

Содержание

Разработка

Разработку спецификации OpenMP ведут несколько крупных производителей вычислительной техники и программного обеспечения, чья работа регулируется некоммерческой организацией, называемой OpenMP Architecture Review Board (ARB) [1].

Первая версия появилась в 1997 году, предназначалась для языка Fortran. Для С/С++ версия разработана в 1998 году. В 2008 году вышла версия OpenMP 3.0.

Введение

OpenMP реализует параллельные вычисления с помощью многопоточности, в которой «главный» (master) поток создает набор подчиненных (slave) потоков и задача распределяется между ними. Предполагается, что потоки выполняются параллельно на машине с несколькими процессорами (количество процессоров не обязательно должно быть больше или равно количеству потоков).

Задачи, выполняемые потоками параллельно, также как и данные, требуемые для выполнения этих задач, описываются с помощью специальных директив препроцессора соответствующего языка — прагм. Например, участок кода на языке Fortran, который должен исполняться несколькими потоками, каждый из которых имеет свою копию переменной N, предваряется следующей директивой: !$OMP PARALLEL PRIVATE(N)

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

Ключевые элементы

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

  • конструкции для создания потоков (директива parallel),
  • конструкции распределения работы между потоками (директивы DO/for и section),
  • конструкции для управления работой с данными (выражения shared и private для определения класса памяти переменных),
  • конструкции для синхронизации потоков (директивы critical, atomic и barrier),
  • процедуры библиотеки поддержки времени выполнения (например, omp_get_thread_num),
  • переменные окружения (например, OMP_NUM_THREADS).

Примеры программ

Ниже приведены примеры программ с использованием директив OpenMP:

Fortran 77

В этой программе на языке Fortran создается заранее неизвестное число потоков (оно определяется переменной окружения OMP_NUM_THREADS перед запуском программы), каждый из которых выводит приветствие вместе со своим номером. Главный поток (имеющий номер 0) также выводит общее число потоков, но только после того, как все они «пройдут» директиву BARRIER.

C

В этой программе два массива (a и b) складываются параллельно десятью потоками.

Эту программу можно скомпилировать, используя gcc-4.4 и более новые с флагом -fopenmp.

Существующие реализации

OpenMP поддерживается многими современными компиляторами.

  • Компиляторы Sun Studio поддерживают официальную спецификацию — OpenMP 2.5 [2] — с улучшенной производительностью под ОС Solaris; поддержка Linux запланирована на следующий релиз.
  • Visual C++ 2005 и выше поддерживает OpenMP в редакциях Professional и Team System [3].
  • GCC 4.2 поддерживает OpenMP, а некоторые дистрибутивы (такие как Fedora Core 5 gcc) включили поддержку в свои версии GCC 4.1.
  • Intel C++ Compiler, включая версию Intel Cluster OpenMP для программирования в системах с распределённой памятью.
  • IBM XL compiler
  • PGI (Portland group)
  • Pathscale
  • HP

Пример реализации

Компиляторы Sun Studio создают отдельную процедуру из исходного кода, располагающегося под директивой parallel, а вместо самой директивы вставляют вызов процедуры __mt_MasterFunction_ библиотеки libmtsk, передавая ей адрес искусственно созданной. Таким образом, разделяемые (shared) данные могут быть переданы последней по ссылке, а собственные (private) объявляются внутри этой процедуры, оказываясь независимыми от своих копий в других потоках.

Процедура __mt_MasterFunction_ создает группу потоков (количеством 9 в приведенном выше примере на языке C), которые будут выполнять код конструкции parallel, а вызвавший её поток становится главным в группе. Затем главный поток организовывает работу подчиненных потоков, после чего начинает выполнять пользовательский код сам. Когда код будет выполнен, главный поток вызывает процедуру _mt_EndOfTask_Barrier_, синхронизирующую его с остальными.

Инструменты

См. также

Примечания

Ссылки

  • openmp.org — официальный сайт OpenMP
Intel Software Network  (рус.)
viva64.com  (рус.)
Другие источники

Wikimedia Foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Полезное


Смотреть что такое "OpenMP" в других словарях:

  • OpenMP — Original author(s) OpenMP Architecture Review Board[1] Developer(s) OpenMP Architecture Review Board …   Wikipedia

  • Openmp — (Open Multi Processing) ist eine seit 1997 gemeinschaftlich von verschiedenen Hardware und Compilerherstellern entwickelte Programmierschnittstelle. Der Standard dient zur Shared Memory Programmierung in C/C++/Fortran auf Multiprozessor Computern …   Deutsch Wikipedia

  • OpenMP — Logo Basisdaten Entwickler Liste kompatibler Compiler …   Deutsch Wikipedia

  • OpenMP — es una interfaz de programación de aplicaciones (API) para la programación multiproceso de memoria compartida en múltiples plataformas. Permite añadir concurrencia a los programas escritos en C, C++ y Fortran sobre la base del modelo de ejecución …   Wikipedia Español

  • OpenMP — (Open Multi Processing) est une interface de programmation pour le calcul parallèle sur architecture à mémoire partagée. Cette API est supportée sur de nombreuses plateformes, incluant Unix et Windows, pour les langages de programmation C/C++ et… …   Wikipédia en Français

  • OpenMP — Open MultiProcessing standardisierte Programmierschnittstelle zu Mehrprozessorsystemen (vergl. http://www.sgi.com/Technology/OpenMP/) …   Acronyms

  • OpenMP — Open MultiProcessing standardisierte Programmierschnittstelle zu Mehrprozessorsystemen (vergl. http://www.sgi.com/Technology/OpenMP/) …   Acronyms von A bis Z

  • Comparison of MPI, OpenMP, and Stream Processing — MPI= MPI is a language independent communications protocol used to program parallel computers. Both point to point and collective communication are supported. MPI is a message passing application programmer interface, together with protocol and… …   Wikipedia

  • Open Multi-Processing — OpenMP OpenMP (Open Multi Processing) est une interface de programmation pour le calcul parallèle sur architecture à mémoire partagée. Cette API est supportée sur de nombreuses plateformes, incluant Unix et Windows, pour les langages de… …   Wikipédia en Français

  • ОМП — OpenMP (OMP) Одесский морской порт Оружие массового поражения Оценка максимального правдоподобия …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»