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

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

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

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

int buf[10];

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

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

int buf[10];

MPI_Status status;

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

int MPI_Recv (void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) - функцияблокирующегоприема

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

3.Напишите программу параллельного вычисления определенного интеграла от функции

2*(x+2*x*x/1200.0) в интервале [0,1].

Метод левых прямоугольников

double f(double x)

{return 2*(x+2*x*x/1200);} // iskomyi integral

int main(int argc,char **argv)

{

int size,rank;

MPI_Status status;

MPI_Init(&argc,&argv);

MPI_Comm_rank(MPI_COMM_WORLD,&rank);

MPI_Comm_size(MPI_COMM_WORLD,&size);

int n=1000,i,d; // 1000 - uzly

float a=0, b=1, h=(b-a)/n,s=0,r=0; //a i b -nachalo i konec otrezka

d=n/(size-1);

if (rank!=size-1) // schitaut vse processy, krome poslednego

{ for (i=rank*d; i<(rank+1)*d; i++) { s=s+h*f(a+i*h); }

MPI_Send(&s,1,MPI_FLOAT,size-1,1,MPI_COMM_WORLD);}

else

{ for (i=0; i<size-1; i++) // poslednii process vse sobiraet

{ MPI_Recv(&s,1,MPI_FLOAT,i,1,MPI_COMM_WORLD, &status); r+=s; } }

MPI_Finalize();}

14 Сурак

1. Таксономия Флинна. Архитектуры sisd, simd.

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

SISD (Single Instruction Stream –Single Data Stream) – одинпотоккомандиодинпотокданных;

SIMD (Single Instruction Stream –Multiple Data Stream) – одинпотоккомандимножествопотоковданных;

MISD (Multiple Instruction Stream –Single Data Stream) – множествопотоковкомандиодинпотокданных;

MIMD (Multiple Instruction Stream –Multiple Data Stream) – множество потоков команд и множество потоков данных.

SISD компьютеры это обычные, "традиционные" последовательные компьютеры, в которых в каждый момент времени выполняется лишь одна операция над одним элементом данных (числовым или каким-либо другим значением). Большинство современных персональных ЭВМ, например, попадает именно в эту категорию. Иногда сюда относят и некоторые типы векторных компьютеров, это зависит от того, что понимать под потоком данных.

SIMD компьютеры состоят из одного командного процессора (управляющего модуля), называемого контроллером, и нескольких модулей обработки данных, называемых процессорными элементами. Управляющий модуль принимает, анализирует и выполняет команды. Если в команде встречаются данные, контроллер рассылает на все процессорные элементы команду, и эта команда выполняется на нескольких или на всех процессорных элементах. Каждый процессорный элемент имеет свою собственную память для хранения данных. Одним из преимуществ данной архитектуры считается то, что в этом случае более эффективно реализована логика вычислений. До половины логических инструкций обычного процессора связано с управлением выполнением машинных команд, а остальная их часть относится к работе с внутренней памятью процессора и выполнению арифметических операций. В SIMD компьютере управление выполняется контроллером, а "арифметика" отдана процессорным элементам. Векторные компьютеры представляют собой пример архитектуры SIMD.

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