Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Примеры программ в стиле 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) бизнес-приложениях. Также распространены оптимизационные задачи, по формированию наилучшего варианта использования финансовых или иных ресурсов, построения оптимальных транспортных и телекоммуникационных сетей, размещения предприятий в регионе и многие другие задачи.





Поделиться с друзьями:


Дата добавления: 2016-07-29; Мы поможем в написании ваших работ!; просмотров: 345 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинать всегда стоит с того, что сеет сомнения. © Борис Стругацкий
==> читать все изречения...

2300 - | 2053 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.