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

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

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

#include <mpi.h>

#include <stdlib.h>

#include <stdio.h>

void main( int argc, 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();}

3. 2*sin(x) функциясының интегралын [0,1] аймақта параллельді есептеңіз.

Напишите программу параллельного вычисления определенного интеграла от фукнции 2*sin(x) в интервале [0,1].

double f(double x)

{return 2*sin(x);}

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);

float h=0.05,a=0,b=1,s=0.0;

for(int i=rank; a+h*(i+1)<b+h; i+=size)

{ s+=h*f(a+h*(i+1)); }

if(rank!=0) {

MPI_Send(&s,1,MPI_FLOAT,0,1,MPI_COMM_WORLD); }

if(rank==0) { float r;

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

printf("s=%f\n ",s); }}


 

Сурак

Закон Амдала с учетом сети. Ускорение. Эффективность.

Рассмотрим некоторый последовательный алгоритм решения какой-либо задачи. В нем есть как операции, которые не могут выполняться параллельно (например, ввод/вывод), так и операции, которые можно выполнять на нескольких процессорах одновременно. Пусть доля последовательных операций в алгоритме равна α. Время выполнения последовательного алгоритма обозначим T1. Время выполнения параллельной версии алгоритма на p одинаковых процессорах можно записать следующим образом: (1)

Ускорением параллельного алгоритма называют отношение времени выполнения лучшего последовательного алгоритмам к времени выполнения параллельного алгоритма: S= (2)

Параллельный алгоритм может давать большое ускорение, но использовать для этого множество процессов неэффективно. Для оценки масштабируемости параллельного алгоритма используется понятие ффективности: E= (3)

Теоретическую оценку максимального ускорения, достижимого для параллельного алгоритма с долей последовательных операций равной α определяется законом Амдала:

S= = (4)