Модель передачи сообщений универсальна. Она может быть реализована на параллельных вычислительных системах как с распределенной, так и с разделяемой памятью, на кластерах рабочих станций и даже на обычных, однопроцессорных компьютерах. В последнем случае, параллельная программа обычно выполняется в режиме отладки. Универсальность и независимость от архитектуры, скрытой от программиста, стали одной из основных причин популярности модели передачи сообщений.
В начале разработки параллельного алгоритма выполняется декомпозиция исходной задачи на подзадачи. Методика разбиения обсуждалась в предыдущих разделах. Каждая подзадача, в общем случае, реализует свой алгоритм и обрабатывается во времени в строго определенной последовательности и очередности. Крайним вариантом декомпозиции и последовательности выполнения является разбиение на подзадачи, которые выполняются по одному и тому же алгоритму (методу) и в произвольной последовательности. То есть, параллельная программа состоит из одинаковых программных фрагментов, расположенных на каждом процессоре, которые одновременно запускаются выделенной подзадачей – мастер-программой. Такую модель параллельности в литературе называют SPMD-моделью (Single Program Multiple Data). В ней, чаще всего, запуск нескольких подзадач на одном процессоре запрещают.
program para
. . .
if (процесс = мастер)
then master
else slave
endif
end
В приведенном фрагменте псевдокода каждый экземпляр программы в процессе своего выполнения определяет, является ли он мастер-программой. После этого, в зависимости от результата проверки, выполняется одна из ветвей условного оператора. Первая ветвь (master) соответствует ведущей задаче, а вторая (slave) – подчиненной задаче. Способы взаимодействия между подзадачами определяются программистом.
Сообщение содержит пересылаемые данные и служебную информацию:
· идентификатор процесса-отправителя сообщения, который в MPI называют рангом процесса;
· адрес, по которому размещаются пересылаемые данные процесса-отправителя;
· тип пересылаемых данных;
· количество данных (размер буфера сообщения — для того, чтобы принять сообщение, процесс должен отвести для него достаточный объем оперативной памяти!);
· идентификатор (ранг) процесса, который должен получить сообщение;
· адрес, по которому должны быть размещены данные процессом-получателем.
Обязательная часть служебной информации сообщения содержит:
· ранг источника;
· ранг адресата;
· тег сообщения;
· идентификатор коммуникатора, описывающего область и порядок взаимодействия посредством обмена данными.
Эти данные позволяют адресату различать сообщения. Ранг источника дает возможность различать сообщения, приходящие от разных процессов. Тег – это идентификатор, задаваемый целым числом от 0 до 32767, который позволяет различать на приемной стороне порядок следования сообщений, приходящих от одного процесса. Данные в сообщении организованы в массив элементов, каждый из которых имеет определенный тип.
Кроме данных система передачи сообщений поддерживает пересылку информации о состоянии процессов коммуникации, например, уведомление о том, что прием данных, отправленных другим процессом, завершен.
Подключение к системе обмена сообщениями осуществляется с помощью вызова нужной процедуры из библиотеки. Прием сообщения начинается с подготовки буфера достаточного размера, в который сначала записываются принимаемые данные. Данные структурированных типов, как правило, перед пересылкой кодируются, а при их приеме декодируются. Кодирование данных, т. е. их преобразование в некоторый универсальный формат, требуется для того, чтобы обеспечить обмен сообщениями между системами с разным форматом представления данных.
Операция отправки или приема сообщения считается завершенной, если программа может вновь использовать такие ресурсы, как буферы сообщений.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.