Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Судаков / Лекции / lec22_mpi_pvm.ppt
Скачиваний:
22
Добавлен:
20.03.2015
Размер:
268.8 Кб
Скачать

Пример асинхронной операции

MPI_Request reqs[4];

MPI_Status stats[4];

MPI_Irecv(&buf[0], 1, MPI_INT, prev, tag1, MPI_COMM_WORLD, &reqs[0]); MPI_Irecv(&buf[1], 1, MPI_INT, next, tag2, MPI_COMM_WORLD, &reqs[1]); MPI_Isend(&rank, 1, MPI_INT, prev, tag2, MPI_COMM_WORLD, &reqs[2]); MPI_Isend(&rank, 1, MPI_INT, next, tag1, MPI_COMM_WORLD, &reqs[3]);

{ do some work }

MPI_Waitall(4, reqs, stats);

Расширенные возможности MPI-2

Параллельный ввод-вывод в разные части файла

Доступ к памяти на удаленной машине

Синхронизация

Создание и остановка процессов

Присоединение к работающей программе

PVM

Рассчитана на гетерогенные системы

Функции

Управление процессами

Упаковка – распаковка данных

Прием – передача сообщений

Управление буфером сообщений

Функции управления системой PVM

Параллельная машина

Создается путем запуска демонов на соответствующих хостах

Имеет общую среду управления

Все системные переменные указанные в системной переменной PVM_EXPORT экспортируются на все процессы задачи

export DISPLAY=myworkstation:0.0

export MYSTERYVAR=13

export PVM_EXPORT=“DISPLAY:MYSTERYVAR”

Машины можно добавлять через командную строку - pvm

По умолчанию все программы должны находится в каталогах

$PVM_ROOT

~pvm3/bin/$PVM_ARCH/

Запуск параллельной машины

Машина запускается командой

pvm

При этом запускается демон на локальной машине

Запуск программ на других машинах выполняется через команду $PVM_RSH

export PVM_RSH="/usr/bin/rsh“

На всех машинах должны быть установлены системные переменные

PVM_ARCH PVM_ROOT PVM_RSH XPVM_ROOT

export PVM_ARCH="LINUXI386“

export PVM_ROOT="/usr/share/pvm3“

export PVM_RSH="/usr/bin/rsh“

Это можно сделать в файле

~/.bashrc

Функции управления процессами

Создание процессов

int numt = pvm_spawn(

char *task, // имя программы

char **argv,

// набор аргументов программы

int flag,

// особенность интерпретации

// аргументов программы

char *where,

// масив имен машин

int ntask,

// количество заданий

int *tids ) // возвращаются

// идентификаторы заданий

Функции управления процессами

int pvm_kill (int taskid) – завершение другого процесса

pvm_exit() – завершение своего процесса

Управление виртуальной машиной

Добавление физических машин

int info = pvm_addhosts( char **hosts, int nhost, int *infos )

Удаление физических машин

int info = pvm_delhosts( char **hosts, int nhost, int *infos )

Остановка виртуальной машины

pvm_halt()

Пример

#include <stdio.h> #include <pvm3.h>

int main (int argc, char* argv[]){

char* hosts[]={"node1", "node2", "node3"}; int tids[16];

int status[3];

int ntasks, nhosts;

char* task="/net/node1/home/saa/src/parallel_and_distributed/pvm/create"; char* arg[]={"child",NULL};

if(argc <2){

nhosts = pvm_addhosts(hosts,3,status); printf("added %d hosts\n",nhosts);

ntasks = pvm_spawn(task,arg,0,NULL,16,tids); printf("spawned %d tasks\n",ntasks); pvm_halt();

}

return 0;

}

Пример выполнения и компиляции

[saa@cluster pvm]$ gcc ./create.c -I$PVM_ROOT/include -L$PVM_ROOT/lib/$PVM_ARCH

-lpvm3 -o create

/usr/share/pvm3/lib/LINUXI386/libpvm3.a(lpvmgen.o)(.text+0x292): In function `pvmlogperror':

: warning: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead

/usr/share/pvm3/lib/LINUXI386/libpvm3.a(lpvmgen.o)(.text+0x289): In function `pvmlogperror':

: warning: `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead [saa@cluster pvm]$ pvm

pvm> quit

Console: exit handler called pvmd still running. [saa@cluster pvm]$ ./create added 2 hosts

spawned 16 tasks Terminated

Соседние файлы в папке Лекции