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

9 08 Сурак

1.Структура mpi программы в стиле spmd. Приведите пример.

Структура SPMD (SingleProgramMultipleData)предполагает, каждый процесс параллельного приложения имеет один и тот же исходный код.

Все процессы исполняют в общем случае различные ветви одной и той же программы. Такой подход обусловлен тем обстоятельством, что задача может быть достаточно естественным образом разбита на подзадачи, решаемые по одному алгоритму. На практике чаще всего встречается именно эта модель программирования (Singleprogram - MultipleData) [1,12].

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

#include <mpi.h>

#include <stdlib.h>

#include <stdio.h>

void main( intargc, char *argv[ ])

{

MPI_Init(&argc,&argv);

MPI_Comm_size(MPI_COMM_WORLD,&numprocs);

MPI_Comm_rank(MPI_COMM_WORLD,&myid);

If (myid == 0 ){

/* Работает только корневой процесс */

}

/* Все без исключения процессы выполняеют одну и ту же работу */

if (myid == 0) {

/* Работает только корневой процесс */

}

MPI_Finalize();

}

Структура MPI программ в стиле MPMD. Приведите пример.

Структура MPMD (MultipleProgramMultipleData) предполагает, процессы параллельного приложения имеют различные исходные коды. MPI - программа представляет собой совокупность автономных процессов, функционирующих под управлением своих собственных программ и взаимодействующих посредством стандартного набора библиотечных процедур для передачи и приема сообщений. Таким образом, в самом общем случае MPI - программа реализует MPMD - модель программирования (Multipleprogram - MultipleData).

Эмуляция MPMD

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

if (rank < .... /* process should run the ocean model */){

ocean( /* arguments */ );

}else{

weather( /* arguments */ );

}}

2. Коммуникации точка/точка. Примеры использования фукнцииMpi_Send(), mpi_Recv.

Это самый простой тип связи между задачами: одна ветвь вызывает функцию передачи данных, а другая - функцию приема. В MPI это выглядит, например, так:

Задача 1 передает:

intbuf[10];

MPI_Send(buf, 5, MPI_INT, 1, 0, MPI_COMM_WORLD );

Задача 2 принимает:

intbuf[10];

MPI_Status status;

MPI_Recv(buf, 10, MPI_INT, 0, 0, MPI_COMM_WORLD, &status );

intMPI_Recv (void*buf, intcount, MPI_Datatypedatatype, int source, int tag, MPI_Commcomm, MPI_Status *status) - функцияблокирующегоприема

bufначальный адрес буфера процесса-получателя (альтернатива); countчисло элементов в принимаемом сообщении (целое); datatypeтип данных каждого элемента сообщения (дескриптор); sourceномер процесса-отправителя (целое); tagтэг сообщения (целое); commкоммуникатор (дескриптор); statusпараметры принятого сообщения (статус)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]