Lect_5_272015 (MPI), страница 2

PDF-файл Lect_5_272015 (MPI), страница 2 Параллельное программирование для высокопроизводительных вычислительных систем (64217): Лекции - 11 семестр (3 семестр магистратуры)Lect_5_272015 (MPI) - PDF, страница 2 (64217) - СтудИзба2020-08-25СтудИзба
MPI39

Описание файла

Файл "Lect_5_272015" внутри архива находится в папке "MPI". PDF-файл из архива "MPI", который расположен в категории "". Всё это находится в предмете "параллельное программирование для высокопроизводительных вычислительных систем" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 2 страницы из PDF

. . . . .MPI_Comm_rank(comm, &myid);color = myid%3;MPI_Comm_split(comm, color, myid, &newcomm);Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 523Пример: вычисление числа Pi(программа в приложении к лекции)Окружность вписывается в квадрат 2 x 2. Отношениеплощадей:Точки внутри квадрата выбираются случайноОтношение числа случайно выбранных точек,попавших в квадрат к числу точек, попавших в кругравно Pi.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 5243.16Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 5253.17Монте Карло метод для интегрированияпроизвольных функцийВычисление случайного значения x для вычисления f(x)и суммы f(x):xr – случайно сгенерированные значенияx, принадлежащие отрезку[x1, x2].Метод Монте Карло полезен для вычисления функций, которыене могут быть проинтегрированы численно (многомерныхфункций)Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 5263.19Вычисление числа Pi(1)/* compute pi using Monte Carlo method */#include <stdio.h>#include <limits.h>#include <stdlib.h>#include <math.h>#include "mpi.h"#define CHUNKSIZE1000/* message tags */#define REQUEST 1#define REPLY 2Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 527Вычисление числа Pi(2)int main(int argc, char *argv[]){int iter;int in, out, i, iters, max, ix, iy, ranks[1], done, temp;double x, y, Pi, error, epsilon;int numprocs, myid, server, totalin, totalout, workerid;int rands[CHUNKSIZE], request;MPI_Comm world, workers;MPI_Group world_group, worker_group;MPI_Status status;Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 528Вычисление числа Pi (2)MPI_Init(&argc, &argv);world = MPI_COMM_WORLD;MPI_Comm_size(world, &numprocs);MPI_Comm_rank(world, &myid);server = numprocs-1; /* last proc is server */if (myid == 0) {if (argc < 2) {fprintf(stderr, "Usage: %s epsilon\n", argv[0] );MPI_Abort(MPI_COMM_WORLD, 1);}sscanf( argv[1], "%lf", &epsilon );}MPI_Bcast(&epsilon, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD);Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 529MPI_Comm_group(world, &world_group);ranks[0] = server;MPI_Group_excl(world_group, 1, ranks, &worker_group);MPI_Comm_create(world, worker_group, &workers);MPI_Group_free(&worker_group);Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 530if (myid == server) {/* I am the rand server */do {MPI_Recv(&request, 1, MPI_INT, MPI_ANY_SOURCE, REQUEST,world, &status);if (request) {for (i = 0; i < CHUNKSIZE; ) {rands[i] = random();if (rands[i] <= INT_MAX) i++;}MPI_Send(rands, CHUNKSIZE, MPI_INT,status.MPI_SOURCE, REPLY, world);}}while(request > 0);Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 531}else {/* I am a worker process */request = 1;done = in = out = 0;max = INT_MAX;/* max int, for normalization */MPI_Send(&request, 1, MPI_INT, server, REQUEST, world);MPI_Comm_rank(workers, &workerid);iter = 0;while (!done) {iter++;request = 1;MPI_Recv(rands, CHUNKSIZE, MPI_INT, server, REPLY,world, MPI_STATUS_IGNORE);Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 532for (i=0; i<CHUNKSIZE; ) {x = (((double) rands[i++])/max) * 2 - 1;y = (((double) rands[i++])/max) * 2 - 1;if (x*x + y*y < 1.0)in++;elseout++;}MPI_Allreduce(&in, &totalin, 1, MPI_INT, MPI_SUM,workers);MPI_Allreduce(&out, &totalout, 1, MPI_INT, MPI_SUM,workers);Pi = (4.0*totalin)/(totalin + totalout);Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 533error = fabs( Pi-3.141592653589793238462643);done = (error < epsilon || (totalin+totalout) > 100000000);request = (done) ? 0 : 1;if (myid == 0) {printf( "\rpi = %23.20f", Pi );MPI_Send(&request, 1, MPI_INT, server, REQUEST,world);} else {if (request)MPI_Send(&request, 1, MPI_INT, server, REQUEST,world);} }MPI_Comm_free(&workers); }Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 534if (myid == 0) {printf( "\npoints: %d\nin: %d, out: %d, <ret> to exit\n",totalin+totalout, totalin, totalout );getchar();}MPI_Finalize();return 0;}Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 535Виртуальные топологииТопология – механизм сопоставления процессамальтернативной схемы адресации.

В MPI топологиивиртуальны, не связаны с физической топологиейсети.Два типа топологий:- декартова (прямоугольная решеткапроизвольной размерности)- топология графа.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 536Декартова топологияЛогическая топология, определяемая многомернойрешеткой.Обобщение линейной и матричной топологий напроизвольное число измерений.Для создания коммуникатора с декартовойтопологией используется функция MPI_Cart_create.С помощью этой функции можно создаватьтопологии с произвольным числом измерений,причем по каждому измерению в отдельности можнонакладывать периодические граничные условия.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 537Виртуальные топологииОсновные функции:MPI_CART_CREATEMPI_CART_COORDSMPI_CART_RANKMPI_CART_SUBMPI_CARTDIM_GETMPI_CART_GETMPI_CART_SHIFTСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 538MPI_CART_CREATEСоздает структуру «прямоугольная решетка»произвольной размерности.int MPI_Cart_create(MPI_Comm old_comm, int ndims, int*dim_size, int *periods, int reorder, MPI_Comm *new_comm).Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 539MPI_CART_CREATEПараметрыold_commMPI_CommInputИсходный коммуникаторndimsintInputЧисло измеренийdim_sizeint *InputМассив размера ndims длязадания числа элементов покаждой из размерностейperiodsint *InputМассив размера ndims длязадания «периодичности» покаждой из размерностейreorderintInputФлаг для заданияпереупорядочиванияэлементовnew_commMPI_Comm *OutputНовый коммуникаторСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 540MPI_Cart_createФункция является коллективной, т.е.

должна запускаться навсех процессах, входящих в группу коммуникатора comm_old.Если какие-то процессы не попадают в новую группу, то для нихвозвращается результат MPI_COMM_NULL. В случае, когдаразмеры заказываемой сетки больше имеющегося в группечисла процессов, функция завершается аварийно.Значение параметра reorder=false означает, что идентификаторывсех процессов в новой группе будут такими же, как в старойгруппе. Если reorder=true, то MPI будет пытатьсяперенумеровать их с целью оптимизации коммуникаций.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 541Пример виртуальной топологиирешеткаMPI_Comm vu;int dim[2], period[2], reorder;dim[0]=4; dim[1]=3;period[0]=TRUE; period[1]=FALSE;reorder=TRUE;MPI_Cart_create(MPI_COMM_WORLD,2,dim,period,reorder,&vu);Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 542Определение оптимальнойконфигурации декартовой решеткиint MPI_Dims_create(int nnodes, int ndims, int *dims)nnodes - общее число узлов в сетке;ndims - число измерений;dims - массив целого типа размерности ndims, в который помещаетсярекомендуемое число процессов вдоль каждого измерения.В массив dims должны быть занесены целые неотрицательные числа.Если элементу массива dims[i] присвоено положительное число, тодля этой размерности вычисление не производится (число процессоввдоль этого направления считается заданным).

Вычисляются толькоте компоненты dims[i], для которых перед обращением к процедуребыли присвоены значения 0. Функция стремится создатьмаксимально равномерное распределение процессов вдольнаправлений, выстраивая их по убыванию, т.е. для 12-ти процессовона построит трехмерную сетку 4 х 3 х 1.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 543MPI_CARTDIM_GETОпределение числа измерений врешетке.int MPI_Cartdim_get( MPI_Comm comm, int* ndims )- comm- ndimsкоммуникатор (решетка)число измеренийСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 544MPI_CARTDIM_GETПример/* create column subgrids */belongs[0] = 1;belongs[1] = 0;MPI_Cart_sub(grid_comm, belongs, &col_comm);/* queries number of dimensions of cartesan grid */MPI_Cartdim_get(col_comm, &ndims);Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 545MPI_CART_COORDSint MPI_Cart_coords( MPI_Comm comm, int rank, int maxdims,int *coords)Перевод номера процесса в его координаты в решеткеСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 546MPI_CART_COORDSПараметрыcommMPI_Comm InputКоммуникаторrankintInputРанг процессаmaxdimsintInputЧисло измеренийрешеткиcoordsint *Outpu Координаты вtрешеткеСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 547MPI_CART_RANKИспользуется для перевода логическихкоординат поцесса в решетке в рангпроцесса.int MPI_Cart_rank( MPI_Comm comm, int *coords, int *rank )Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 548MPI_CART_RANKПараметрыcommMPI_CommInputПараметрыcoordsint *InputМассив размера ndimsопределяющийкоординаты процессав решеткеrankintOutput Ранг процессаСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 549MPI_CART_SUBИспользуется для разделения коммуникатора наподгруппы .MPI_CART_SUB создает новый коммуникаторменьшей размерностиint MPI_Cart_sub( MPI_Comm old_comm, int *belongs,MPI_Comm *new_comm )Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 550MPI_CART_SUBПараметрыold_commMPI_CommInputПараметрыbelongsint *InputМассив размераndims, определяющийпринадлежностьновомукоммуникаторуnew_commnew_commMPI_CommOutput Новый коммуникаторрешеткаСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 551MPI_CART_SUB примерПредполагаем, что число процессов =6.Формируем 2D (3x2) решетку.

Заполняем матрицуA(i,j)A(i,j) = (i+1)*10 + j + 1; i=0,1,2; j=0,1Значения элементов:A(0,0) = 11, A(2,1) = 32 и т.д..Создаем подрешетку, используя MPI_CART_SUB.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 552MPI_CART_SUB пример#include "stdio.h"#include "mpi.h"void main(int argc, char *argv[]){int nrow, mcol, i, lastrow, p, root;int Iam, id2D, colID, ndim;int coords1D[2], coords2D[2], dims[2], aij[1], alocal[3];int belongs[2], periods[2], reorder;MPI_Comm comm2D, commcol;/* Starts MPI processes ...

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5173
Авторов
на СтудИзбе
436
Средний доход
с одного платного файла
Обучение Подробнее