Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций 4.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
889.86 Кб
Скачать

Конспект лекций модуля № 4 "Целевой курс" дисциплины "Распределенные программные системы и технологии" Тема 11. Системы параллельных вычислений

11.1. PVM (Parallel Virtual Machine)

11.1.1. Общие понятия

PVM - это пакет программ, который позволяет использовать неоднородную сеть компьютеров как один большой параллельный компьютер.

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

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

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

11.1.2. Функции управления задачами

PVM включает в себя функции позволяющие управлять задачами: создавать и удалять их. При запуске созается уникальный идентификатор, который используется в дальнейшем, в том числе и при удалении задачи.

int tid = pvm_mytid ( void );

- возвращает идентификатор задачи tid >= 0. Эта функция может вызываться более одного раза, но в первый раз она, как правило, вызывается в самом начале программы, т.к. значением tid может определяться выбор для выполнения той или иной части программы.

int numt = pvm_spawn (

char *task, /* имя исполняемого файла */

char **argv, /* аргументы командной строки */

int flag, /* опции запуска */

char *where, /* указывает место запуска */

int ntask, /* число запускаемых копий программы */

int *tids /* массив значений tid для запущенных задач */

);

- запускает в PVM ntask копий исполняемого файла с именем "task" с одинаковыми аргументами командной строки в массиве argv и возвращает число запущенных задач numt а также последовательность идентификаторов для запущенных задач. Причем, если numt < ntask, то в последних ntask - numt элементах массива tids записаны отрицательные коды ошибок, объясняющие срыв запуска задачи.

При выборе значений параметров flag и "where" пользователю целесообразно проконсультироваться с программистом, которому известны особенности установки системы PVM на используемом вычислительном комплексе.

int info = pvm_kill ( int tid );

- завершает выполнение задачи с идентификатором tid; при ошибке возвращает код ошибки info < 0. Отметим, что задача не может "убить" себя, поэтому один из возможных сценариев завершения многозадачной работы PVM заключается в том, что одна из задач "убивает" все остальные, после чего вызывает функцию

int info = pvm_exit ( void );

которая завершает работу PVM, запущенной пользователем, но при этом сама задача продолжает выполняться уже как объект локальной операционной системы и завершает работу, как обычно.