Основными методами параллельного программирования являются
OpenMP
OpenMP — это интерфейс прикладного программирования для создания многопоточных приложений, предназначенных в основном для параллельных вычислительных систем с общей памятью. В последние годы весьма активно разрабатывается расширение стандартов OpenMP для параллельных вычислительных систем с распределенной памятью, например продукт Cluster OpenMP компании Intel. Этот продукт позволяет объявлять области данных, доступные всем узлам кластера, и осуществлять передачу данных между узлами кластера.
OpenMP состоит из набора директив для компиляторов и библиотек специальных функций. При этом директивы OpenMP аналогичны директивам препроцессора для языка C/C++ и являются аналогом комментариев в алгоритмическом языке Fortran.
Любая программа, последовательная или параллельная, состоит из набора областей двух типов: последовательных областей и областей распараллеливания. При выполнении последовательных областей порождается только один главный поток (процесс). В этом же потоке инициируется выполнение программы, а также происходит ее завершение. В областях распараллеливания порождается целый ряд параллельных потоков. Порожденные параллельные потоки могут выполняться как на разных процессорах, так и на одном процессоре вычислительной системы. В последнем случае параллельные процессы (потоки) конкурируют между собой за доступ к процессору. Управление конкуренцией осуществляется планировщиком операционной системы. Принципиальная схема параллельной программы изображена на рис. 1.
Рис. 1.  Принципиальная схема параллельной программы
Параллельные потоки из одной параллельной области программы могут выполняться как независимо друг от друга, так и с пересылкой и получением сообщений от других параллельных потоков. Последнее обстоятельство усложняет разработку программы, поскольку в этом случае программисту приходится заниматься планированием, организацией и синхронизацией посылки сообщений между параллельными потоками.
Для обмена данными между параллельными процессами (потоками) в OpenMP используются общие переменные. При обращении к общим переменным в различных параллельных потоках возможно возникновение конфликтных ситуаций при доступе к данным. Для предотвращения конфликтов можно воспользоваться процедурой синхронизации. При этом надо иметь в виду, что процедура синхронизации — очень дорогая операция по временным затратам.
Выполнение параллельных потоков в параллельной области программы начинается с их инициализации. Она заключается в создании дескрипторов порождаемых потоков и копировании всех данных из области данных главного потока в области данных создаваемых параллельных потоков. Эта операция чрезвычайно трудоемка, поэтому при разработке параллельных программ c помощью OpenMP возможно создание более медленных параллельных программпо сравнению с последовательными аналогами.
После завершения выполнения параллельных потоков при передаче данных от параллельных потоков главному важна синхронизация завершения параллельных потоков, поскольку время выполнения даже одинаковых по трудоемкости параллельных потоков непредсказуемо. При синхронизации параллельные потоки, уже завершившие свое выполнение, простаивают и ожидают завершения работы самого последнего потока. Кроме того, операция синхронизации очень трудоемка.
На основании изложенного выше можно сделать следующий важный вывод: при выделении параллельных областей программы и разработке параллельных процессов необходимо, чтобы трудоемкость параллельных процессов была не менее примерно 2000 операций деления. В противном случае параллельный вариант программы будет проигрывать в быстродействии последовательной программе. Для эффективной работающей параллельной программы этот предел должен быть существенно превышен.
MPI
MPI — наиболее распространенная технология программирования для параллельных компьютеров с распределенной памятью, обычно это компьютеры типа MIMD или SPMD (Single Program Multiple Data). Реализована в виде библиотеки функций. Поддерживается работа с языками Фортран и Си. Технология основана на обмене сообщениями. Современные реализации, чаще всего, соответствуют стандарту MPI версии 1.1.
MPI-программа — это множество параллельных взаимодействующих процессов - программ, написанных на каком-либо языке высокого уровня. Каждый процесс работает в своем адресном пространстве, никаких общих переменных или данных в MPI нет. Основным способом взаимодействия между процессами является явная посылка сообщений. Сообщение — это набор данных некоторого типа. Каждое сообщение имеет несколько атрибутов , в частности, номер процесса-отправителя, номер процесса-получателя, идентификатор сообщения и другие.
Локализация взаимодействия параллельных процессов осуществляется созданием групп процессов со своей средой взаимодействия (коммуникатором) для каждой группы. . . Группы могут полностью совпадать, входить одна в другую, не пересекаться или пересекаться частично. Процессы могут взаимодействовать только внутри некоторого коммуникатора, сообщения, отправленные в разных коммуникаторах, не пересекаются и не мешают друг другу.
PVM
В основу PVM положена концепция виртуальной параллельной вычислительной машины, которая объединяет в единый ресурс множество (до тысяч) разнородных узлов. Возможно создание приложений как типа SPMD (одна параллельная программа - много потоков данных), та и типа MPMD (много параллельных программ - много потоков данных). Предусмотрены средства корректного преобразования данных при их передаче между узлами различной архитектуры и между программами, написанными на разных языках программирования (СИ/СИ++ и ФОРТРАН). Важно наличие механизма асинхронных уведомлений о значимых событиях в виртуальной машине (добавление/удаление узла, выход узла из строя). PVM изначально является открытой и свободно распространяемой системой.
Список литературы
1. Левин М.П. Поддержка курса Параллельное программирование с использованием OpenMP. — http://www.intuit.ru/department/se/openmp/2/
2. MPI: The Message Passing Interface. - http://parallel.ru/tech/tech_dev/mpi.html.
3. MPI в качестве высокоуровневого средства разработки параллельных программ. - http://www.rk6.bmstu.ru/electronic_book/progrws/mpi.html