Lect_4_201015 (MPI)

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

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

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

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

Текст из PDF

Параллельное программирование длявысокопроизводительных вычислительных систем.сентябрь – декабрь 2015 г.Лекция 420 октября 2015 г.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 41ТемаПроизводные типы данныхСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 42Производные типы данных MPIНазначение:пересылка данных, расположенных внесмежных областях памяти в одномсообщении;пересылка разнотипных данных в одномсообщении;облегчение понимания программы;Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 43Производные типы данныхне могут использоваться ни в какихоперациях, кроме коммутационных производные ТД следует понимать какописатели расположения в памятиэлементов базовых типов производный ТД - скрытый объект отображение типа:Typemap = {(type0, disp0), ...

, (typen-1, dispn-1)}Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 44СЦЕНАРИЙ РАБОТЫ СПРОИЗВОДНЫМИ ТИПАМИСоздание типа с помощью конструктора.Регистрация.Использование.Освобождение памяти.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 45Стандартный сценарий создания ииспользования производного ТДПроизводный тип строится из предопределенных типовMPI и ранее определенных производных типов спомощью специальных функций-конструкторовMPI_Type_contiguous,MPI_Type_vector, MPI_Type_hvector,MPI_Type_indexed, MPI_Type_hindexed,MPI_Type_structНовый производный тип регистрируется вызовомфункции MPI_Type_commitКогда производный тип становится ненужным, онуничтожается функцией MPI_Type_freeСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 46Производные типы данных.Typemap = {(type0, disp0), ...

, (typen-1, dispn-1)} отображение типа вместе с базовымадресом начала расположения данных bufопределяет коммуникационный буферобмена (состоит из n элементов) i-й элемент имеет адрес buf+dispi ибазовый тип typeiСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 47Характеристики ТД в MPIПротяженность (кол-во байт, котороепеременная данного типа занимает впамяти)MPI_Type_extentРазмер (кол-во реально передаваемыхбайт в коммуникационных операциях)MPI_Type_sizeСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 48MPI_Type_extentint MPI_Type_extent(MPI_Datatype datatype,MPI_Aint *extent)datatypeextent- тип данных- протяженность элемента заданного типаСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 49MPY_Type_sizeint MPI_Type_size(MPI_Datatype datatype, int*size)datatypesize- тип данных- размер элемента заданного типаСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 410MPI_Type_contiguousСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 411MPI_Type_contiguousint MPI_Type_contiguous(int count, MPI_Datatype oldtype,MPI_Datatype *newtype)count - число элементов базового типаoldtype - базовый тип данныхnewtype - новый производный тип данныхСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 412MPI_Type_commitКаждый конструктор возвращает незарегистрированный(uncommited) тип.

Процесс commit можно представить себе какпроцесс компиляции типа во внутренне представление.Должен вызываться MPI_Type_commit (&datatype).После регистрации тип может повторно использоваться.Повторный вызов commit не имеет эффекта.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 413MPI_Type_commitint MPI_Type_commit(MPI_Datatype *datatype)datatype - новый производный тип данныхСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 414MPI_Type_contiguous - пример/* create a type which describes a line of ghost cells *//* buf[0..n-1] set to ghost cells */int n;MPI_Datatype ghosts;MPI_Type_contiguous (n, MPI_DOUBLE, &ghosts);MPI_Type_commit(&ghosts)MPI_Send (buf, 1, ghosts, dest, tag, MPI_COMM_WORLD);....MPI_Type_free(&ghosts);Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 415Typemaps, продолжение Дополнительныеопределенияlower_bound(Typemap) = min dispj , j = 0,…, n-1 upper_bound(Typemap) = max(dispj +sizeof(typej)) + eextent(Typemap) =upper_bound(Typemap) lower_bound(Typemap)Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 416Дополнительные функцииMPI_Type_get_extent (MPI_Datatype datatype, MPI_Aint *lb,MPI_Aint *extent)datatype (datatype you are querying)lb(lower bound of datatype)extent (extent of datatype)Возвращает нижнюю границу и extent заданного типа.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 417MPI_Type_vectorСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 418MPI_Type_vectorint MPI_Type_vector(int count, int blocklength, int stride,MPI_Datatype oldtype, MPI_Datatype *newtype)count- число блоковblocklength - число элементов базового типа в каждом блокеstride- шаг между началами соседних блоков, измеренныйчислом элементов базового типаoldtype- базовый тип данныхnewtype- новый производный тип данных.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 419MPI_Type_hvectorСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 420MPI_Type_hvectorint MPI_Type_hvector(int count, int blocklength, MPI_Aintstride, MPI_Datatype oldtype, MPI_Datatype *newtype)count - число блоковblocklength - число элементов базового типа в каждом блокеstride - шаг между началами соседних блоков в байтахoldtype - базовый тип данныхnewtype - новый производный тип данных.Отличие от MPI_Type_vector: stride определяется в байтах, не в элементах (‘h’ –heterogeneous)Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 421Пример 1 – рассылка клеточнойструктурыИспользуется MPI_type_vector и MPI_Type_create_hvectorвместе для рассылки отмеченных клеток:Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 422Пример, продолжение.double a[6][5], e[3][3];MPI_Datatype oneslice, twosliceMPI_Aint lb, sz_dblint myrank, ierrMPI_Comm_rank (MPI_COMM_WORLD, &myrank);MPI_Type_get_extent (MPI_DOUBLE, &lb, &sz_dbl);MPI_Type_vector (3,1,2,MPI_DOUBLE, &oneslice);MPI_Type_create_hvector (3,1,12*sz_dbl, oneslice, &twoslice);MPI_Type_commit (&twoslice);Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 423MPI_Type_indexedСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 424MPI_Type_indexedint MPI_Type_indexed(int count, int *array_of_blocklengths, int*array_of_displacements, MPI_Datatype oldtype,MPI_Datatype *newtype)count - число блоковarray_of_blocklengths - массив, содержащий число элементов базового типа в каждомблокеarray_of_displacements - массив смещений каждого блока от начала размещенияэлемента нового типа, смещения измеряются числом элементов базового типаoldtype - базовый тип данныхnewtype - новый производный тип данныхСмещения между последовательными блоками не обязательно должнысовпадать.

Это позволяет выполнять пересылку данных однимвызовом.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 425Пример: верхнетреугольнаяматрица[0][0 [0][1 Последовательное расположение]]Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 426Пересылка верхнетреугольнойматрицыdouble a[100][100];Int disp[100], blocklen[100], i, dest, tag;MPI_Datatype upper;/* compute start and size of each row */for (i = 0; i < 100; ++i){disp[i] = 100*i + i;blocklen[i] = 100 – i;}MPI_Type_indexed(100, blocklen, disp, MPI_DOUBLE, &upper);MPI_Type_commit(&upper);MPI_Send(a, 1, upper, dest, tag, MPI_COMM_WORLD);Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 427MPI_Type_structСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 428MPI_Type_structint MPI_Type_struct(int count, int *array_of_blocklengths,MPI_Aint *array_of_displacements, MPI_Datatype*array_of_types, MPI_Datatype *newtype)count - число блоков;array_of_blocklength - массив, содержащий число элементоводного из базовых типов в каждом блоке;array_of_displacements - массив смещений каждого блока отначала размещения структуры, смещения измеряются в байтах;array_of_type - массив, содержащий тип элементов в каждомблоке;newtype - новый производный тип данных.Наиболее общий конструктор.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 429Упаковка данныхУпаковка / распаковка:MPI_PackMPI_UnpackОпределение размера буфера дляупаковки:MPI_Pack_sizeСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 430MPI_Packint MPI_Pack(void* inbuf, int incount, MPI_Datatype datatype,void *outbuf, int outsize, int *position, MPI_Comm comm)IN inbuf - адрес начала области памяти с элементами, которые требуется упаковать;IN incount - число упаковываемых элементов;IN datatype - тип упаковываемых элементов;OUT outbuf - адрес начала выходного буфера для упакованных данных;IN outsize - размер выходного буфера в байтах;INOUT position -текущая позиция в выходном буфере в байтах;IN comm - коммуникатор.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 431MPI_Unpackint MPI_Unpack(void* inbuf, int insize, int *position, void *outbuf, intoutcount, MPI_Datatype datatype, MPI_Comm comm)IN inbuf - адрес начала входного буфера с упакованными данными;IN insize - размер входного буфера в байтах;INOUT position - текущая позиция во входном буфере в байтах;OUT outbuf - адрес начала области памяти для размещения распакованных элементоIN outcount - число извлекаемых элементов;IN datatype - тип извлекаемых элементов;IN comm - коммуникатор.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 432Пересылка элементов разноготипаэлементы нужно предварительно запаковать водин массив, последовательно обращаясь кфункции упаковки MPI_Packпри 1ом вызове функции упаковки параметрposition, как правило, устанавливается в 0, чтобыупакованное представление размещалось сначала буферадля непрерывного заполнения буферанеобходимо в каждом последующем вызовеиспользовать значение параметра position,полученное из предыдущего вызовараспаковывать - аналогичноСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 433MPI_Pack_sizeC:int MPI_Pack_size(int incount, MPI_Datatypedatatype, MPI_Comm comm, int *size)IN incount - число элементов, подлежащих упаковкеIN datatype - тип элементов, подлежащих упаковкеIN comm - коммуникаторOUT size - размер сообщения в байтах после его упаковкиСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 434Пример рассылки разнотипных данных из 0-го процесса сиспользованием функций MPI_Pack и MPI_Unpackсhar buff[100];double x, y;int position, a[2];{MPI_Comm_rank(MPI_COMM_WORLD, &myrank);if (myrank == 0){ /* Упаковка данных*/position = 0;MPI_Pack(&x, 1, MPI_DOUBLE, buff, 100, &position, MPI_COMM_WORLD);MPI_Pack(&y, 1, MPI_DOUBLE, buff, 100, &position, MPI_COMM_WORLD);MPI_Pack(a, 2, MPI_INT, buff, 100, &position, MPI_COMM_WORLD);}/* Рассылка упакованного сообщения */MPI_Bcast(buff, position, MPI_PACKED, 0, MPI_COMM_WORLD);/* Распаковка сообщения во всех процессах */if (myrank != 0)position = 0;MPI_Unpack(buff, 100, &position, &x, 1, MPI_DOUBLE, MPI_COMM_WORLD);MPI_Unpack(buff, 100, &position, &y, 1, MPI_DOUBLE, MPI_COMM_WORLD);MPI_Unpack(buff, 100, &position, a, 2, MPI_INT, MPI_COMM_WORLD);Спецкурс "Параллельное программирование}для высокопроизводительных систем",лекция 435Задание 2Разработать параллельный алгоритм и исследовать егоэффективность для задачи умножения матрицы на вектор:- Матрица плотная.- Матрица разреженная.Формат представления разреженных матриц выбратьсамостоятельно.Предусмотреть возможность проверки правильности выполненияалгоритмов.В отчете представить анализ и объяснение полученных оценокэффективности алгоритмов.

Построить графики ускорения иэффективности для различных параметров решаемой задачи.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 436.

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