Читать диплом по информатике, вычислительной технике, телекоммуникациям: "Основы параллельного программирования на кластере и разработка элективного курса «Администрирование в информационных системах и администрирование виртуальных машин»" Страница 19

назад (Назад)скачать (Cкачать работу)

Функция "чтения" служит для ознакомления с работой. Разметка, таблицы и картинки документа могут отображаться неверно или не в полном объёме!

где они расположены. Использование этой кодировки накладывает одно ограничение. Передаваемые данные не должны быть изменены между моментом, когда началась их упаковка и моментом окончания передачи буфера сообщения адресату. Однако, при использовании данного типа упаковки, имеется одно заметное преимущество. Функция упаковки pvm_initsend может быть вызвана только один раз в начале прогарммы. Например в начале работы программы мы можем упаковать данные из области перекрытия (см. главу "Декомпозиция данных") и передавать их множество раз по мере необходимости.1.6.4 Упаковка данных

Для FORTRANа существует только одна функция, которая управялет упаковкой данных всех типов.call pvmfpack( what, xp, nitem, stride, info )В пареметре what указывается тип упаковываемых данных. Параметр xp является первым элементом массива данных. Пареметры nitem и stride описаны выше. Параметр info - возвращаемое значение. Значения параметра what представлены в следующей таблице:STRING0REAL44

BYTE11COMPLEX85

INTEGER22REAL86

INTEGER43COMPLEX167 Константы, соответствующие значениям параметра what определены в файле pvm3/include/fpvm3.h. Некоторые производители могут расширять этот список дополнительными данными, например INTEGER8, REAL16 и др.Приведем пример использования всех этих функций:CALL PVMFINITSEND(PVMRAW, INFO)

CALL PVMFPACK( INTEGER4, NSIZE, 1, 1, INFO )

CALL PVMFPACK( STRING, `row 5 of NXN matrix', 19, 1, INFO )

CALL PVMFPACK( REAL8, A(5,1), NSIZE, NSIZE , INFO )

CALL PVMFSEND( TID, MSGTAG, INFO ) Прием и посылка данныхcall pvmfsend( tid, msgtag, info )

call pvmfmcast( ntask, tids, msgtag, info ) Функция pvm_send() помечает сообщение тагом msgtag и выполняет немедленную пересылку данных процессу с соответствющим идентификатором tid.

Функция pvm_mcast() помечает сообщение тагом msgtag и выполняет немедленную пересылку данных все процессам, имеющим идентификаторы, совпадающими со значениями, хранящимися в массиве tids. Длина массива tids равна ntask.

Следующие функции предназначены для совмещения работы по упаковке данных и их пересылке:call pvmfpsend( tid, msgtag, xp, cnt, type, info ) Эти функции упаковывают массив определенного параметром type типа в буфер и передают его процессу, идентифицированному параметром tid. В FORTRANе типы данных определены так же, как и для процедуры pvmfpack().Система PVM содержит несколько методов для организации приема сообщений. Причем отсутствует соотыктствие функций. То есть нет такого ограничения, когда сообщение, посланное процедурой pvm_psend должно быть обязательно принято процедурой с именем тип pvm_precv. Вне зависимости от того, как было послано сообщение, принято оно может быть либым из возможных вариантов. То же замечание касается адресной и мультикастной (multicast) передачи.

Следующие процедуры осуществляют блокирующий прием сообщений:call pvmfrecv( tid, msgtag, bufid )Эти процедуры инициируют процесс ожидания поступления сообщения, помеченного тагом msgtag от процеса с идентификатором tid (если сообщение еще не пришло). В случае, когда значения параметров tid и/или msgtag равны -1, осуществляется ожидание сообщения от любого процесса и/или сообщения с любым тагом.

После того, как сообщение получено, эти процедуры возвращают управление вызвавшей их программе, передав в bufid идентификатор буфера, в который помещено полученное сообщение. Значение bufid


Интересная статья: Основы написания курсовой работы