Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГОСЫ 2015 / ГОСЫ 2015 / Паралнльное программирование .doc
Скачиваний:
25
Добавлен:
15.02.2016
Размер:
175.62 Кб
Скачать

Параллельное программирование.

1. Интерфейс передачи сообщений, библиотека функций mpi. Основные понятия и определения.

MPI является библиотекой функций обмена данными между процессами, реализованной для языков С и Fortran. Головной организацией проекта MPI является Аргоннская национальная лаборатория США. После появления первой версии стандарта MPI в мае 1994 года MPI получил широкое распространение. В настоящее время стандарт MPI адаптирован для большинства суперЭВМ и кластеров.

Под параллельной программой в рамках MPI понимается множество одновременно выполняемых процессов, имеющих раздельные адресные пространства. Каждый процесс параллельной программы порождается на основе копии одного и того же программного кода (модель SPMP - одна программа множество процессов single program multiple processes). Программный код, представленный в виде исполняемой программы, должен быть доступен в момент запуска параллельной программы на всех используемых процессорах.

Количество процессов и число используемых процессоров определяется в момент запуска параллельной программы средствами среды исполнения MPI и в ходе вычислений меняться не может (в стандарте MPI-2 предусматривается возможность динамического изменения количества процессов). Все процессы программы последовательно нумеруются от 0 до p-1, где p есть общее количество процессов. Номер процесса называется рангом процесса.

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

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

Парные операции передачи данных выполняются для процессов, принадлежащих одному и тому же коммуникатору. Коллективные операции применяются одновременно для всех процессов коммуникатора.

В ходе вычислений могут создаваться новые и удаляться существующие группы процессов и коммуникаторы. Один и тот же процесс может принадлежать разным группам и коммуникаторам. Все имеющиеся в параллельной программе процессы входят в состав создаваемого по умолчанию коммуникатора с идентификатором MPI_COMM_WORLD.

MPI не предусматривает механизмов поведения при ошибках в коммуникационной системе и не обеспечивает никаких механизмов для обработки коммуникационных отказов. По умолчанию программная ошибка, обнаруженная во время исполнения MPI процедуры, вызывает окончание параллельных вычислений. Однако MPI предусматривает для пользователей механизм замены этого умолчания и обработки ошибок. Почти все функции MPI возвращают код, который указывает на успешное или не успешное завершение операции. Пользователь может самостоятельно проанализировать возвращаемый код MPI-ошибки и предусмотреть свою собственную обработку ошибочных ситуаций.

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

MPI содержит функции создания виртуальных топологий. Топология – это логическая организация процессов в группе (внутри коммуникатора).

Следует различать виртуальную и физическую топологию процессов. Виртуальная топология должна применяться к физическим процессам для организации логической структуры процессов с целью увеличения производительности обменов на данной вычислительной системе. Описание виртуальной топологии зависит от конкретного приложения и является машинно-независимой.

Наиболее общим видом топологии процессов является структура графа. Узлы графа соответствуют процессам, ребра соответствуют связям между процессами.

Наиболее часто в параллельных приложениях используется топология двумерных массивов или декартова топология. Эта структура полностью определяется количеством процессов по каждой координате (строки и столбцы). Координаты в декартовой топологии нумеруются от 0. Например, соотношение между номером процесса в группе и координатами в решетке [2, 2] для четырех процессов будет следующим:

coord (0,0): rank 0 сoord (0,1): rank 1

сoord (1,0): rank 2 сoord (1,1): rank 3

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

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

Вызов коллективной функции на процессе возвращает управление сразу после того, как только его участие в коллективной операции завершено. Завершение вызова не означает, что другие процессы в группе завершили коллективную операцию, а только показывает, что процесс может обращаться к буферу обмена. Таким образом, вызов коллективной операции имеет эффект синхронизации всех процессов в группе. Это утверждение не относится к барьерной функции (MPI_Barrier), которая при вызове блокирует процесс до тех пор, пока все процессы в группе не вызовут ее, выполняя тем самым явную синхронизацию.

Используемые в коллективных операциях типы данных, должны совпадать у процесса-отправителя и процесса получателя. Условия соответствия типов для коллективных операций более строгие, чем аналогичные условия для парных обменов. А именно, для коллективных операций количество и тип посланных данных должно точно соответствовать количеству и типу принятых данных. Коллективные операции могут иметь один процесс отправитель или получатель, или отправителями/получателями являются все процессы в группе. Различные коллективные операции (широковещание, рассылка или сбор данных) имеют единственный процесс-отправитель или процесс-получатель. Такой процесс называются корневым (root).

Некоторые аргументы в коллективных функциях определены как “существенные только для корневого процесса” и игнорируются для всех других участников операции.

Вызовы коллективных операций могут использовать те же коммуникаторы, что и парные обмены, при этом MPI гарантирует, что сообщения, созданные коллективными операциями, не будут смешаны с сообщениями, созданными парным обменом. Ключевым понятием в коллективных функциях является группа участвующих процессов, но в качестве явного аргумента выступает коммуникатор. Коммуникатор понимается как идентификатор группы, связанный с контекстом. Не разрешается использовать в качестве аргумента коллективной функции интер-коммуникатор (коммуникатор, для выполнения парных обменов между группами различных коммуникационных пространств).

1. Барьерная синхронизация MPI_Barrier (MPI_Comm comm)

В ряде ситуаций независимо выполняемые в процессах вычисления необходимо синхронизировать. Так, например, для измерения времени начала работы параллельной программы необходимо, чтобы для всех процессов одновременно были завершены все предварительные действия. Синхронизация процессов – это одновременное достижение процессами тех или иных точек процесса вычислений.

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

2. Широковещательная передача MPI_BCAST

Функция посылает сообщение из одного процесса всем процессам группы, включая себя.

MPI_Bcast (buffer, count, datatype, root, comm )

IN/OUT buffer - адрес начала буфера

IN count - количество записей в буфере (целое)

IN datatype - тип данных в буфере

IN root - номер корневого процесса (целое)

IN comm - коммуникатор

Функция MPI_Bcast осуществляет рассылку данных из буфера buf, содержащего count элементов типа type с процесса, имеющего номер root, всем процессам, входящим в коммуникатор comm. Следует отметить, что:

1. Функция MPI_Bcast определяет коллективную операцию и, тем самым, при выполнении необходимых рассылок данных вызов функции MPI_Bcast должен быть осуществлен всеми процессами указываемого коммуникатора.

2. Указываемый в функции MPI_Bcast буфер памяти имеет различное назначение в разных процессах. Для root процесса, с которого осуществляется рассылка данных, в этом буфере должно находиться рассылаемое сообщение. Для всех остальных процессов указываемый буфер предназначен для приема передаваемых данных.

Коллективная операция рассылки данных от одного процесса всем (распределение данных) MPI_Scatter отличается от широковещательной рассылки тем, что корневой процесс передает всем процессам различные данные. Данные выбираются из массива равными порциями в порядке возрастания номеров процессов.

Соседние файлы в папке ГОСЫ 2015