Читайте также: |
|
Для FORTRAN існує тільки одна функція, яка керує упакуванням даних всіх типів:
call pvmfpack (what, xp, nitem, stride, info)
У пареметрі what вказується тип упаковуваних даних. Параметр xp є першим елементом масиву даних. Пареметри nitem і stride описані вище. Параметр info - повертає значення. Значення параметра what представлені наступним чином:
STRING 0 REAL4 4
BYTE1 1 COMPLEX8
INTEGER2 2 REAL8
INTEGER4 3 COMPLEX16 7
Константи, відповідні значенням параметра 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 <0 сигналізує про виниклу помилку.
Аналогом блокуючої функції є функція call pvmfnrecv (tid, msgtag, bufid).
Параметри і повернені значення цієї функції аналогічні використовуваним в блокуванні функції. Відмінність полягає в тому, що виклик pvm_nrecv не ініціює процес очікування повідомлення. У разі, якщо очікуване повідомлення ще не надійшло, bufid повертається 0. Функція pvm_nrecv може бути викликана в процесі обрахунку неодноразово.
У випадку, коли очікування повідомлення не повинно переривати виконання програми, для перевірки факту отримання повідомлення можна використовувати наступну функцію:
call pvmfprobe (tid, msgtag, bufid)
Якщо очікуване повідомлення ще не настало, ця функція повертає bufid = 0. Першочергово в повідомлення в bufid повертається значення відмінне від нуля. Функцію можна викликати неодноразово, заповнюючи час між викликами якої-небудь іншої продуктивної роботи. Функція pvm_probe не отримує повідомлення, для його отримання необхідно скористатися однією з відповідних функцій.
Замість послідовного виклику процедур блокуючого прийому повідомлення та розпакування буфера з витяганням даних в локальні змінні можна використовувати функцію:
call pvmfprecv (tid, msgtag, xp, cnt, type, rtid, rtag, rcnt, info).
Цю функцію можна використовувати для прийому повідомлень, в яких містяться однотипні дані. Виклик цієї функції ініціює процес очікування повідомлення, поміченого тегом msgtag від процесу з ідентифікатором tid. За надходження повідомлення pvm_precv розпаковує дані загальним обсягом len (size of data type) в буфер buf.
Типи даних в FORTRAN-програмах такі ж, як це дано в описі функції pvmfpack.
Дата добавления: 2015-01-05; просмотров: 174 | Поможем написать вашу работу | Нарушение авторских прав |