Примеры программ в стиле SPMD и MPMD. При программировании для сетевых кластеров используется SPMD-технология (SingleProgram – MultipleData

При программировании для сетевых кластеров используется SPMD-технология (SingleProgram – MultipleData, одна программа – множественные данные). Пример программы в стиле SPMD

ProgramExample3d

Implicit None

Include 'mpif.h'

Integer Size, Rank, Ierr, I, N

Double Precision Sum, GSum, A, B, time1, time2, Al, Bl, X, F

! Пределы интегрирования

Parameter (A=0.d0, B=1.d0)

! Подынтегральная функция

F(x)=DLog(1/x)

Call MPI_INIT(Ierr)

Call MPI_COMM_SIZE(MPI_COMM_WORLD, Size, Ierr)

Call MPI_COMM_RANK(MPI_COMM_WORLD, Rank, Ierr)

! «0»-процессзасекаетвремя

If (Rank.eq.0) time1 = MPI_WTime()

! Каждый процесс определяет свои пределы интегрирования

! и число интервалов разбиения

Al = A+(B-A)*Rank/Size

Bl = Al+(B-A)/Size

N = 1000000

! Каждый процесс определяет свою частичную сумму

Sum = 0

Do I = 1,N

X = Al+(Bl-Al)*(I-0.5d0)/N

Sum = Sum + F(X)

End Do

! «0»-процесс получает результат суммирования частичных сумм

Call MPI_REDUCE(Sum, GSum, 1, MPI_DOUBLE_PRECISION, MPI_SUM, 0, MPI_COMM_WORLD, Ierr)

If (Rank.eq.0) Then

time2 = MPI_WTime()

GSum = GSum/(N*Size)

Write (6,*) 'Result=',GSum,' Error=',1-GSum, ' Time=',time2 - time1

End If

Call MPI_FINALIZE(Ierr)

Stop

EndProgram

Примерпрограммы в стиле MPMD

int MPI_Comm_spawn(char *command, char *argv[],

int maxprocs, MPI_Info info, int root, MPI_Comm comm,
MPI_Comm *intercomm,
int array_of_errcodes[])

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

double f(double x)

{return 2*sin(x);}

int main(intargc,char **argv)

{ intsize,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(inti=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); }}


Сурак

1.В каких случаях эффективно использование параллельных методик программирования ?

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

1) системах поддержки проектирования (CAD – ComputerAidedDesign). 2) инженерных приложениях. 3) математическом моделировании физических процессов. 4) моделирование глобальных процессов в науках о Земле. 5) вычислительной химии. 6) бизнес-приложениях. Также распространены оптимизационные задачи, по формированию наилучшего варианта использования финансовых или иных ресурсов, построения оптимальных транспортных и телекоммуникационных сетей, размещения предприятий в регионе и многие другие задачи.