Вход/Регистрация
Параллельное и распределенное программирование на С++
вернуться

Хьюз Камерон

Шрифт:

Упаковка и отправка сообщений

Гейст Бигулин (Geist Beguelin) и его колле г и так описывают модель сооб щ ений PVM-среды:

PVM-демоны и задачи могут формировать и отправлять произвольной длины сообщения, содержащие типизированные данные. Если содержащиеся в сообщениях данные имеют несовместимые форматы, то при передаче между компьютерами их можно преобразовать, используя стандарт XDR1. Сообщения помечаются во время отправки с помощью определенного пользователем целочисленного кода и мотуг быть отобраны для приема посредством адреса источника, или тега. Отправитель сообщения не ожидает от получателя подтверждения приема (квитирования), а продолжает работу сразу после отправки сообщения в сеть. Затем буфер сообщений может быть очищен или вновь использован по назначению. Сообщения буфери-зируются до тех пор, пока не будут приняты получателем. PVM-система надежно доставляет сообщения адресатам, если таковые существуют. При оправке сообщений от каждого отправителя каждому получателю их порядок сохраняется. Это означает, что если отправителем было послано несколько сообщений, они будут получены адресатом в том же порядке, в котором были отправлены.

Библиотека PVM содержит семейство функций, используемых для упаковки данных различных типов в буфер оправки. В это семейство входят функции упаковки, предназначе нн ые для символьных массивов, значений типа double, float, int, long, byte и т.д. Список рллт_рк-функций представлен в табл. 6.3.

Таблица 6.3. Фу н кции упаковки

Байты:

int pvm_pkbyte(char *cp, int count, int std) ;

Комплексные числа (комплексные числа типа double):

int pvm_pkcplx(float *xp, int count, int std) ; int pvm_pkdcplx(double *zp, int count, int std) ;

Значения типа double:

int pvm_pkdouble(double *dp, int count, int std) ;

' XDR (eXternal Data Representation) - стандарт для аппаратно-независимых структур данных, pM' работанный фирмой Sun Microsystems.

6.3. Базовые механизмы PVM 237

Окончание табл. 6.3

Значения типа f 1 о а t :

int pvm_pkfloat(float *fp, int count, int std); Значения типа int:

int pvm_pkint(int *np, int count, int std) ; Значения типа long.

int pvm_pklong(long *np, int count, int std) ; Значения типа short:

int pvm_pkshort(short *np, int count, int std) ; Строки:

int pvm_pkstr(char *cp) ;

Все функции упаковки, перечисленные в табл. 6.3, используются для сохранения массиваданных в буфере отправки. Обратите вни м ание на то, что каждая PVM-задача (см. рис.6.6) должна и м еть по крайней м ере один буфер отправки и один буфер приема. Каждал функция упаковки прини м ает указатель на м ассив соответствую щ его типаданных. Все функции упаковки, за исключением функции pvm_pkstr , принимают общее количество элементов, подлежащих сохранению в массиве (а не количество байтов!). Для функции pvm_pkstr предполагается, что символьный массив, с которым она работает, завершается значение м NULL. Каждал функция упаковки, за исключением функции pvm_pkstr, в качестве последнего пара м етра прини м ает значение, которое представляет способ обхода элементов исходного массива при их упаковке в буфер отправки. Этот параметр часто называют шагом по индексу (stride). Например, если этот шаг равен четырем, то в буфер упаковки будет помещен каждый четвертый элемент исходного массива. Важно отметить, что до отправки каждого сообщения необходимо использовать функцию pvm_initsend , которая очищает буфер и готовит его к пересылке следующего сообщения. Функция pvm_initsend готовит буфер к пересылке сообщения в одном из трех форматов: XDR, Raw или In Place.

Формат XDR (External Z>ata .Representation) — это стандарт, используемый для описания и шифрования данных. Слелует иметь в виду, что компьютеры, включенные всрелу PVM, могут быть совершенно разными, т.е. среда PVM, например, может состоять из Sun-, Macintosh-, Crays- и AMD-компьютеров. Эти компьютеры могут отличаться размерами машинных слов и по-разному сохранять различные типы данных. В некоторых случалх компьютеры могут различаться и битовой организацией. Стандарт XDR позволяет компьютерам обмениваться данными вне зависимости от типа их архитектуры. Формат Raw используется для отправки данных в собственно м фор м ате компьютера-отправителя. При это м никакое специальное кодирование не при м еняется. Формат In Place в действительности не требует упаковки данных в буфере отправки, и адресату отправляются лишь указатели на данные и раз м ер данных. В это м случае задача-получатель напря м ую копирует данные. В библиотеке PVM эти три типа кодирования данных представляются соответствующи м и тре м я константа м и:

PvmDataDefault XDR

PvmDataRaw Без специального кодирования

PvmDataInPlace В буфер отправки копируются лишь указатели и раз м ер данных

Вот пример: int BufferId;

BufferId = pvm_initsend(PvmDataRaw); //.. .

Здесь константа PvmDataRaw, переданнал функции pvm_initsend в качестве параметра, означает, что данные упаковываются в буфер как есть, т.е. без специально г о кодирования. При успешном выполнении функция возвра щ ает номер буфера отправки (в данном случае он будет записан в переменную BufferId). Важно помнить, что хотя в каждый момент времени активным может быть только один буфер отправки, Любая PVM-задача может иметь несколько таких буферов, и с каждым из них связывается некоторый идентификационный номер.

В библиотеке PVM прелусмотрено несколько функций, имею щ их отношение к процелуре отправки.

Синопсис

# include « pvm3 .h»

int pvm_send(int taskid, int messageid); int pvm_psend(int taskid, int messageid,

char *buffer,int len, int datatype); int pvm_mcast(int *taskid,int ntask,int messageid);

В каждой из этих функций параметр taskid представл я ет собой идентификатор PVM-задачи, которая принимает сооб щ ение. При вызове функции pvm_mcast параметр taskid означает коллекцию задач, представл я емых идентификаторами, которые передаютс я в массиве *taskid. Параметр messageid указывает идентификатор посылаемо г о сооб щ ени я. Идентификаторы сооб щ ений представл я ют собой целочисленные значени я, определенные пользователем. Они используются отправителем и получателем дл я идентификации сооб щ ени я, например:

  • Читать дальше
  • 1
  • ...
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: