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)
Подпрограмма pvm_precv() сочетает в себе функции блокирующего
приема и распаковки буфера приема. Она не возвращает bufid.
Вместо него, она возвращает действительные значения TID,
msgtag и cnt.
int info = pvm_precv( int tid, int msgtag, void *vp, int cnt,
Подпрограмма pvm_recvf() модифицирует контекст работы принимающих
функций и может быть использована для "расширения" ПВМ. Используемый
по умолчанию контекст приема заключается в соответствии источника
и тега сообщения. Он может быть модифицирован для любой определяемой
пользователем функции сравнения. Подпрограммы, соответствующей pvm_recvf()
с интерфейсом на Fortran - нет.
Знаете ли Вы, что эконометрические модели - это экономико-математические модели, целью которых является установление значений параметров исследуемой экономической системы, не поддающихся непосредственному наблюдению. Как правило, представляют собой эмпирическую спецификацию теоретической модели исследуемой системы, содержащей требуемый параметр, которую оценивают на основе имеющихся эмпирических данных с помощью того или иного статистического метода (например, метода наименьших квадратов, метода оболочки данных, метода максимальной энтропии и т.п.).