Шаг 39.
Параллельные алгоритмы. Средства построения параллельных программ. Стандарт программирования для систем с общей памятью OpenMP

    На этом шаге мы рассмотрим особенности этого стандарта.

    OpenMP (Open specifications for Multi-Processing) - стандарт для написания параллельных программ для многопроцессорных вычислительных систем с общей оперативной памятью. Программа представляется как набор потоков (нитей), объединенных общей памятью, где проблема синхронизации решается введением критических секций и мониторов. Разработкой стандарта занимается организация OpenMP ARB (ARchitecture Board), в которую вошли представители крупнейших компаний-разработчиков SMP-архитектур (Symmetric Multiprocessing) и программного обеспечения. Основными алгоритмическими языками параллельного программирования с использованием OpenMP в настоящее время являются Fortran и C/C++. Спецификации для языков Fortran и C/C++ появились соответственно в октябре 1997 г. и октябре 1998 г. OpenMP - это набор специальных директив компилятору, библиотечных функций и переменных среды. Наиболее оригинальны директивы компилятору, которые используются для обозначения областей в коде с возможностью параллельного выполнения. Компилятор, поддерживающий OpenMP, преобразует исходный код и вставляет соответствующие вызовы функций для параллельного выполнения этих областей кода.

    В настоящее время OpenMP поддерживается большинством разработчиков параллельных вычислительных систем: компаниями Intel, Hewlett-Packard, Silicon Graphics, Sun, IBM, Fujitsu, Hitachi, Siemens, Bull и другими. Многие известные компании в области разработки системного программного обеспечения также уделяют значительное внимание разработке системного программного обеспечения с OpenMP. Значительное число компаний и научно-исследовательских организаций, разрабатывающих прикладное программное обеспечение, в настоящее время использует OpenMP при разработке своих программных продуктов. Среди этих компаний и организаций отметим ANSYS, Fluent, Oxford Molecular, NAG, DOE ASCI, Dash, Livermore Software, а также и российские компании ТЕСИС, Центральную геофизическую экспедицию и российские научно-исследовательские организации, такие как Институт математического моделирования РАН, Институт прикладной математики им. Келдыша РАН, Вычислительный центр РАН, Научно-исследовательский вычислительный центр МГУ, Институт химической физики РАН и другие.

    Использовать технологию OpenMP целесообразно в следующих случаях:

  1. Целевая платформа является многопроцессорной или многоядерной. Если приложение полностью использует ресурсы одного ядра или процессора, то, сделав его многопоточным при помощи OpenMP, вы почти наверняка повысите его быстродействие.
  2. Приложение должно быть кроссплатформенным. OpenMP - кроссплатформенный и широко поддерживаемый API. А так как он реализован на основе директив pragma, приложение можно скомпилировать даже при помощи компилятора, не поддерживающего стандарт OpenMP.
  3. Выполнение циклов нужно распараллелить. Весь свой потенциал OpenMP демонстрирует при организации параллельного выполнения циклов. Если в приложении есть длительные циклы без зависимостей, OpenMP - идеальное решение.
  4. Перед выпуском приложения нужно повысить его быстродействие. Так как технология OpenMP не требует переработки архитектуры приложения, она прекрасно подходит для внесения в код небольших изменений, позволяющих повысить его быстродействие.

    В то же время следует признать, что OpenMP имеет свои недостатки. Эта технология ориентирована в первую очередь на разработчиков высокопроизводительных вычислительных систем и наиболее эффективна, если код включает много циклов и работает с разделяемыми массивами данных.

    На следующем шаге мы рассмотрим схему программирования в OpenMP.




Предыдущий шаг Содержание Следующий шаг