ПВМ   ОКМ   ДМ   экономическая информатика   4GL   Теория и практика обработки информации

Параллельная виртуальная машина, PVM

Передача и прием данных

int info = pvm_send( int tid, int msgtag)

call pvmfsend( tid, msgtag, info)

int info = pvm_mcast( int *tids, int ntask, int msgtag)

call pvmfmcast( ntask, tids, msgtag, info)

Подпрограмма pvm_send() метит сообщение целочисленным идентификатором msgtag и передает его непосредственно процессу с TID.

Подпрограмма pvm_mcast() метит сообщение целочисленным идентификатором msgtag и широковещательно передает это сообщение всем задачам, указанным в целочисленном массиве tids (исключая себя). Массив tids - длиной ntask.

int info = pvm_psend( int tid, int msgtag, void *vp, int cnt, int type)

call pvmfpsend( tid, msgtag, xp, cnt, type, info)

Подпрограмма pvm_psend() упаковывает и посылает массив данных указанного типа задаче, идентифицированной TID. Предопределенные типы данных на Fortran такие же, как и для pvmfpack(). На C, аргумент type может иметь любое из следующих значений.

PVM_STR PVM_FLOAT
PVM_BYTE

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

int bufid = pvm_recv( int tid, int msgtag)

call pvmfrecv( tid, msgtag, bufid)

Эта подпрограмма блокирующего приема будет ожидать до тех пор, пока от задачи с TID не поступит сообщение с меткой msgtag. Значение -1 в msgtid или TID означает "все" (специальный символ). После чего, она помещает сообщение в новый активный буфер приема, который создает. Предыдущий активный буфер приема очищается, если он не был сохранен вызовом pvm_setrbuf().

int bufid = pvm_nrecv(int tid, int msgtag)

call pvmfnrecv( tid, msgtag, bufid)

Если запрашиваемое сообщение не прибыло, то неблокирующий прием pvm_nrecv() при завершении вернет равный 0. Эта подпрограмма может вызываться сколько угодно раз для определенного сообщения - с целью проверки его прибытия - в промежутках выполнения допустимой работы. Если же допустимой в данной ситуации работы не осталось, для того же сообщения можно воспользоваться блокирующим приемом pvm_recv(). Если сообщение с меткой msgtag поступило от задачи с TID, pvm_nrecv() помещает это сообщение в новый активный буфер (который она создает) и возвращает идентификатор данного буфера. Предыдущий активный буфер приема очищается, если он не был сохранен вызовом pvm_setrbuf(). Значение -1 в msgtid или TID означает "все" (специальный символ).

int bufid = pvm_probe( int tid, int msgtag)

call pvmfprobe( tid, msgtag, bufid)

Если запрашиваемое сообщение не прибыло, то pvm_probe() возвращает bufid, равный 0. В противном случае она возвращает bufid сообщения, но не "принимает" его. Эта подпрограмма может вызываться сколько угодно раз для определенного сообщения - с целью проверки его прибытия - в промежутках выполнения допустимой работы. Дополнительно может быть вызвана pvmbufinfo() с возвращенным bufid - для получения информации о сообщении перед его непосредственным приемом.

int bufid = pvm_trecv( int tid, int msgtag, struct timeval *tmout)

call pvmftrecv( tid, msgtag, sec, usec, bufid)

ПВМ также поддерживает версию приема с тайм-аутом. Рассмотрим случай, при котором сообщение не прибывает никогда (по причине ошибки или сбоя): подпрограмма pvm_recv может заблокироваться навечно. Для избежания такой ситуации, пользователь может захотеть "прекратить" ожидание после истечения фиксированного временного отрезка. Подпрограмма pvm_trecv() предоставляет пользователю возможность указать период тайм-аута. Если этот период очень велик, то pvm_trecv() действует подобно pvm_recv. Если же период тайм-аута установлен в ноль, то
pvm_trecv() действует подобно pvm_nrecv. Так, pvm_trecv "заполняет пробел" между функциями блокирующего и неблокирующего приема.

Подпрограмма pvm_bufinfo() возвращает msgtag, TID источника и длину в байтах сообщения, идентифицированного с помощью bufid. Она может примеряться для установления метки и источника сообщений, которые были приняты с использованием специальных символов.

int info = pvm_bufinfo( int bufid, int *bytes, int *msgtag, int *tid)

call pvmfbufinfo( bufid, bytes, msgtag, tid, info)

Подпрограмма pvm_precv() сочетает в себе функции блокирующего приема и распаковки буфера приема. Она не возвращает bufid. Вместо него, она возвращает действительные значения TID, msgtag и cnt.

int info = pvm_precv( int tid, int msgtag, void *vp, int cnt,

           int type, int *rtid, int *rtag, int *rcnt)

call pvmfprecv( tid, msgtag, xp, cnt, type, rtid, rtag, rcnt, info)

Подпрограмма pvm_recvf() модифицирует контекст работы принимающих функций и может быть использована для "расширения" ПВМ. Используемый по умолчанию контекст приема заключается в соответствии источника и тега сообщения. Он может быть модифицирован для любой определяемой пользователем функции сравнения. Подпрограммы, соответствующей pvm_recvf() с интерфейсом на Fortran - нет.

ПВМ   ОКМ   ДМ   экономическая информатика   4GL   Теория и практика обработки информации

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

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution