лекции (MPI), страница 3

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

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

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

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

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

В отличие от аналогичныхблокирующих функций изменен критерий завершенияопераций – немедленное завершение.Проверка состояния передач и ожидание завершениепередач выполняются специальными функциями.Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 333Неблокирующие функцииNon-Blocking OperationMPI функцииStandard sendMPI_IsendSynchronous sendMPI_IssendBuffered sendMPI_IbsendReady sendMPI_IrsendReceiveMPI_Irecv“I” : ImmediateСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 334Параметры неблокирующихоперацийDatatypeТип MPI_DatatypeCommunicatorАналогично блокирующим (тип MPI_Comm)RequestТипMPI_RequestПараметр request задается при инициации неблокирующейоперацииИспользуется для проверки завершения операцииСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 335Совмещение блокирующих инеблокирующих операцийSend и receive могут блокирующими инеблокирующимиБлокирующий send может соответствоватьнеблокирующему receive, и наоборот, например,MPI_IsendMPI_RecvНеблокирующий send может быть любого типа –synchronous, buffered, standard, readyСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 336Форматы неблокирующих функцийMPI_Isend(buf,count,datatype,dest,tag,comm,request)MPI_Irecv(buf,count,datatype,source,tag,comm, request)request – “квитанция» о завершении передачи.Тип: MPI_RequsetMPI_REQUEST_NULL – обнулениеMPI_Wait() ожидание завершения.MPI_Test() проверка завершения.

Возвращается флаг, указывающий нарезультат завершения.Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 337Неблокирующийsendint MPI_Isend (void *buf,int count,MPI_Datatype datatype,int dest,int tag,MPI_Comm comm,MPI_Request *request)Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 338Неблокирующийreceiveint MPI_Irecv (void *buf,int count,MPI_Datatype datatype,int dest,int tag,MPI_Comm comm,MPI_Request *request)Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 339Wait/Test функцииint MPI_Wait(MPI_Request *request,MPI_Status*status)Блокирует процесс до завершения передачи поrequest.

В случае успешного завершенияrequest устанавливается в MPI_REQUEST_NULL.Информация по завершившейся передаче – в status.int MPI_Test(MPI_Request *request,int *flag,MPI_Status *status)flag – true, если передача завершилась.Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 340Множественные проверкиTest или wait для завершения одной (и только одной) передачи:– int MPI_Waitany (…)– int MPI_Testany (…)Test или wait завершения всех передач:– int MPI_Waitall (…)– int MPI_Testall (…)Test или wait завершения всех возможных к данному моменту:– int MPI_Waitsome(…)– int MPI_Testsome(…)Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 341СвойстваСохраняется упорядоченность передач, задаваемая порядкомвызовов асинхронных функцийГарантируется завершение соответствующей асихроннойпередачиСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 342Пример использования асинхронныхпередачMPI_Comm_rank(MPI_COMM_WORLD, &myrank); /* find rank */if (myrank == 0) {int x;MPI_Isend (&x,1,MPI_INT, 1, msgtag, MPI_COMM_WORLD, &req1);compute();MPI_Wait (&req1, &status);} else if (myrank == 1) {int x;MPI_Recv (&x,1,MPI_INT,0,msgtag, MPI_COMM_WORLD, &status);}Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 343Коллективные передачиПередача сообщений между группой процессовВызываются ВСЕМИ процессами в коммуникатореПримеры: Broadcast, scatter, gather (рассылка данных) Global sum, global maximum, и т.д.

(Коллективныеоперации) Барьерная синхронизацияСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 344Функции коллективных передачСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 345Характеристики коллективных передачКоллективные операции не являются помехой операциям типа«точка-точка» и наоборотВсе процессы коммуникатора должны вызывать коллективнуюоперациюСинхронизация не гарантируется (за исключением барьера)Нет неблокирующих коллективных операций (MPI-2)Нет тэговПринимающий буфер должен точно соответствовать размеруотсылаемого буфераСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 346Барьерная синхронизацияПриостановка процессов до выхода ВСЕХ процессовкоммуникатора в заданную точку синхронизацииint MPI_Barrier (MPI_Comm comm)Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 347Широковещательная рассылкаOne-to-all передача: один и тот же буфер отсылается отпроцесса root всем остальным процессам в коммуникатореint MPI_Bcast (void *buffer, int, count,MPI_Datatype datatype,int root, MPI_Comm comm)Все процессы должны указать один тот же root и communicatorСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 348ScatterOne-to-all communication: различные данные из одногопроцесса рассылаются всем процессам коммуникатора (впорядке их номеров)int MPI_Scatter(void* sendbuf, int sendcount,MPI_Datatype sendtype, void* recvbuf,int recvcount,MPI_Datatype recvtype, int root,MPI_Comm comm)sendcount – число элементов, посланных каждому процессу, необщее число отосланных элементов;send параметры имеют смысл только для процесса rootСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 349Scatter – графическая иллюстрацияABCDEABCDEABCСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 3DE50GatherAll-to-one передачи: различные данные собираются процессомrootСбор данных выполняется в порядке номеров процессовДлина блоков предполагается одинаковой, т.е.

данные,посланные процессом i из своего буфера sendbuf, помещаютсяв i-ю порцию буфера recvbuf процесса root. Длина массива, вкоторый собираются данные, должна быть достаточной для ихразмещения.int MPI_Gather(void* sendbuf, int sendcount,MPI_Datatype sendtype,void* recvbuf, int recvcount, MPI_Datatype recvtype,int root, MPI_Comm comm)Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 351Gather – графическая илюстрацияABCDECDEABCDEABСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 352Глобальные операции редукцииОперации выполняются над данными, распределенными попроцессам коммуникатораПримеры: Глобальная сумма или произведение Глобальный максимум (минимум) Глобальная операция, определенная пользователемСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 353Общая формаint MPI_Reduce(void* sendbuf, void* recvbuf,int count, MPI_Datatype datatype, MPI_Op op,int root,MPI_Comm comm)•••count число операций “op” выполняемых надпоследовательными элементами буфера sendbuf(также размер recvbuf)op является ассоциативной операцией, котораявыполняется над парой операндов типа datatypeи возвращает результат того же типаСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 354Предопределенные операции редукцииMPI NameMPI_MAXMPI_MINMPI_SUMMPI_PRODMPI_LANDMPI_BANDMPI_LORMPI_BORMPI_LXORMPI_BXORMPI_MAXLOCMPI_MINLOCFunctionMaximumMinimumSumProductLogical ANDBitwise ANDLogical ORBitwise ORLogical exclusive ORBitwise exclusive ORMaximum andlocationMinimum and locationСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 355MPI_ReduceСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 356Варианты MPI_REDUCE•MPI_ALLREDUCE - нет root процесса (все получают рез-т)•MPI_REDUCE_SCATTERMPI_SCAN - “parallel prefix”•Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 357MPI_ALLREDUCEСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 358MPI_REDUCE_SCATTERСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 359MPI_SCANСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 360Коллективные операции редукцииТипы данных, используемых в редукционныхоперациях MPI_MAXLOC и MPI_MINLOC .MPI DatatypeC DatatypeMPI_2INTpair of intsMPI_SHORT_INTshort and intMPI_LONG_INTlong and intMPI_LONG_DOUBLE_INTlong double and intMPI_FLOAT_INTfloat and intMPI_DOUBLE_INTdouble and intСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 361MPI_ALLTOALLint MPI_Alltoall( void* sendbuf,int sendcount,MPI_Datatype sendtype,void* recvbuf,int recvcount,MPI_Datatype recvtype,MPI_Comm comm);/* in *//* in *//* out *//* in *//* in */Описание: Рассылка сообщений от каждого процесса каждому j-ый блок данных из процесса i принимается j-ымпроцессом и размещается в i-ом блоке буфераrecvbufСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 362MPI_ALLTOALLСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 363Пример: вычисление PI (1)#include "mpi.h"#include <math.h>int main(int argc, char *argv[]){int done = 0, n, myid, numprocs, i, rc;double PI25DT = 3.141592653589793238462643;double mypi, pi, h, sum, x, a;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);MPI_Comm_rank(MPI_COMM_WORLD,&myid);while (!done) {if (myid == 0) {printf("Enter the number of intervals: (0 quits) ");scanf("%d",&n);}MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);if (n == 0) break;Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 364Пример: PI (2)h = 1.0 / (double) n;sum = 0.0;for (i = myid + 1; i <= n; i += numprocs) {x = h * ((double)i - 0.5);sum += 4.0 / (1.0 + x*x);}mypi = h * sum;MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0,MPI_COMM_WORLD);if (myid == 0)printf("pi is approximately %.16f, Error is %.16f\n",pi, fabs(pi - PI25DT));}MPI_Finalize();return 0;}Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 365Замер времени MPI_WtimeВремя замеряется в секундахВыделяется интервал в программеdouble MPI_Wtime(void);Пример.double start, finish, elapsed, time ;start=-MPI_Wtime;MPI_Send(…);finish = MPI_Wtime();time= start+finish;Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 366Задание 1.Программа на MPI.Реализовать функцию:int MY_Bcast(double *x_send, double *x_recv, int root) – рассылка значенияx_send из процесса root по всем процессам программы.Использовать только функции точка-точка.Время работы замерять функцией MPI_Wtime().Построить график зависимости времени выполнения программы длязаданного файла от числа процессов.Формат отчета – будет уточнен.Отчет в электронном видеСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 367Параллельное программирование длявысокопроизводительных вычислительных систем.сентябрь – декабрь 2015 г.Лекция 420 октября 2015 г.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 41ТемаПроизводные типы данныхСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 42Производные типы данных MPIНазначение:пересылка данных, расположенных внесмежных областях памяти в одномсообщении;пересылка разнотипных данных в одномсообщении;облегчение понимания программы;Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 43Производные типы данныхне могут использоваться ни в какихоперациях, кроме коммутационных производные ТД следует понимать какописатели расположения в памятиэлементов базовых типов производный ТД - скрытый объект отображение типа:Typemap = {(type0, disp0), ...

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