Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ВС13 / ЛабРаб / Пример параллельной программы.doc / Пример параллельной программы

.doc
Скачиваний:
21
Добавлен:
17.03.2015
Размер:
60.42 Кб
Скачать

Пример параллельной программы, написанной на языке С с использованием библиотеки стандарта MPI в модели SPMD

  • Приведённая в таблице, в первой колонке, программа, предназначена для выполнения на двух параллельных процессах.

  • В первой колонке приведён исходный текст программы для исполнения в SPMD модели (Single Program Multi Data).

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

  • Каждый из двух процессов заполняет половину массива а (нулевой от 0 до 49 элемента, а первый от 50 до 99 элемента) номером процесса. После это первый процесс пересылает нулевому свою половину массива и нулевой выводит весь массив целиком на стандартный вывод.

Исходный текст программы

Реально исполняемый текст программы

В процессе 0

В процессе 1

#include <stdio.h>

#include "mpi.h"

void main(int argc, char ** argv)

{

int myrank, size.i; inta{100];

MPI_Status status;

MPI_Init (&argc, &argv);

MPI_Comm_rank (MPI_COM_MWORLD, &myrank);

MPI_Comm_size (MPI_COMM_WORLD, &size);

for (i=(mt)myrank*(100/size); i<(int)(myrank+l)*(IOO/size);

i++)

a[i]=myrank;

if(myrank==0)

{

MPI_Recv(&a[50], 100/size,MPI_INT,

1,0,MPI_COMM_WORLD.&status);

for(i=0;i<100;i++)

printf("%d ",a[i]);

}

if(myrank==l)

{

MPI_Send(&a[50],100/size, MPI_INT,0,0,

MPI_COMM_WORLD);

}

MPI_Finalize ();

}

#include <stdio.h>

#include "mpi.h"

void main(int argc, char ** argv)

{

int myrank, size.i; inta{100];

MPI_Status status;

MPI_Init (&argc, &argv);

MPI_Comm_rank (MPI_COM_MWORLD, &myrank);

MPI_Comm_size (MPI_COMM_WORLD, &size);

for (i=0; i<50; i++)

a[i]=myrank;

MPI_Recv(&a[50], 100/size,MPI_INT,

1,0,MPI_COMM_WORLD.&status);

for(i=0;i<100;i++)

printf("%d ",a[i]);

MPI_Finalize ();

}

#include <stdio.h>

#include "mpi.h"

void main(int argc, char ** argv)

{

int myrank, size.i; inta{100];

MPI_Status status;

MPI_Init (&argc, &argv);

MPI_Comm_rank (MPI_COM_MWORLD, &myrank);

MPI_Comm_size (MPI_COMM_WORLD, &size);

for (i=50; i<100; i++)

a[i]=myrank;

MPI_Send(&a[50],100/size, MPI_INT,0,0,

MPI_COMM_WORLD);

MPI_Finalize ();

}