• Управление процессами.
• Упаковка сооб щ ений и их отправка.
• Распаковка сооб щ ений и их прием.
• Обмен задач сигналами.
• Управление буферо м сооб щ ений.
• Функции обработки инфор м ации и служебные процедуры.
• Групповые операции.
Эти библиотечные функции легко интегрировать в С++ среду. Префикс pvm_ в имени каждой функции позволяет не забыть о ее принадлежности соответствующему пространству имен. Для использования PVM-функций необходимо включить в программу заголовочный файл pvm3 . h и скомпоновать ее с библиотекой libpvm. В программах 6.1 и 6.2 демонстрируется, как работает простая PVM-программа. Инструкции по компиляции и выполнению программы 6.1 приведены в разделе «Профиль програ мм ы 6.1».
// Программа 6.1
#include «pvm3.h» #include #include
int main(int argc,char *argv[]) {
int RetCode,MessageId;
int PTid, Tid;
char Message[100j;
float Result[l];
PTid = pvm_mytid();
RetCode = pvm_spawn(«program6-2»,NULL,0,''",l,&Tid);
if(RetCode == 1){
MessageId = 1;
strcpy(Message,«22»);
pvm_initsend(PvmDataDefault);
pvm_pkstr(Message);
pvm_send(Tid,MessageId);
pvm_recv(Tid,MessageId);
pvm_upkfloat(Result,1,1);
cout « Result[0] « endl;
pvm_exit();
return(0) ;
}
else{
cerr << «Задачу породить невозможно. " « endl;
pvm_exit();
return(1) ;
}
}
Профиль программы 6.1
Имя программы |program6-1.cc
Описание |Использует функцию pvn_send{) для пересылки числа в другую PVM-задачу, которая выполняется параллельно с данной (программа6.2), и функцию pvm_recv() для получения числа от этой задачи.
Требуемая библиотекаlibpvm3
Требуемые заголовки
Инструкции по компиляции и компоновке программ
gcс++ -о program6-l -I $PVM_ROOT/include -L $PVM_ROOT/lib/ | SPVM_ARCH -1 pvm3
*Среда для тестирования
Solaris8,PVM 3.4.3, SuSE Linux 7.1, gcc 2.95.2.
Инструкции по выполнению./program6-l
Примеча н ияНеобходимо запустить на выполнение программу pvmd.
В програм м е 6.1 использовано восе м ь са м ых распространенных PVM-функций: pvm_mytid(), pvm_spawn(), pvm_initsend(), pvm_pkstr(), pvm_send (), pvm_recv (), pvm_upkfloat() и pvm_exit(). Функция pvm_mytid() возвращает идентификатор вызываю щ его процесса (задачи). PVM-систе м а связывает идентификатор задачи с кажды м процессо м, который ее создает. Идентификатор задачи используется для отправки сооб щ ений задача м, получения сооб щ ений от других задач,сигнализации, прерывания задач и т.п. Любая PVM-задача м ожет связываться с любойдругой PVM-задачей до тех пор, пока не получит доступ к ее идентификатору. Функция pvm_spawn() предназначена для запуска нового PVM-процесса. В программе 6.1 функция pvm_spawn() используется для запуска на выполнение программы 6.2. Идентификатор новой задачи возвра щ ается в параметре &Tidвызова функции pvm_spawn(). В PVM-среде для передачи данных между задачами используются буферы сооб щ ений. Каждая задача может иметь один или несколько таких буферов. При этом только один из них считается активным. Перед отправкой каждого сооб щ ениявызывается функция pvm_initsend(), которая позволяет подготовить или инициа л изировать активный буфер сообщений. Функция pvm_pkstr() используется для упаковки строки, содержащейся в пара м етре Message.При упаковке строка шифруется дляпередачи другой за д аче (в другой процесс), выполняе м ой, воз м ожно, на друго м компьютере с другой архитектурой. PVM-среда обрабатывает элементы, связанные с преобразованием из одной архитектуры в другую. Среда PVM требует применять процедуру упаковки сооб щ ения до его отправки и проце д уру распаковки при его получении, чтобы с д елать сооб щ ение читабельным д ля получателя. О д нако из этого правила су щ ествует исключение, которое мы обсу д им ниже. Функции pvm_send()и pvm_recv()используются для отправки и приема сообщений соответственно. Параметр MessageIdпросто опре д еляет, с каким сооб щ ением работает отправитель. Обратите внимание на то, что в программе 6.1 функции pvm_send() и pvm_recv() со д ержат и д ентификатор за д ачи, получаю щ ей д анные, и и д ентификатор за д ачи, отправляю щ ей данные, соответственно. Функция pvm_upkfloat()извлекает полученное сооб щ ение из активного буфера сооб щ ений и распаковывает его, сохраняя в массиве типа float. Программа 6порождает PVM-задачу для выполнения программы 6.2.
Читать дальше