Lect_5_272015 (MPI)
Описание файла
Файл "Lect_5_272015" внутри архива находится в папке "MPI". PDF-файл из архива "MPI", который расположен в категории "". Всё это находится в предмете "параллельное программирование для высокопроизводительных вычислительных систем" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
СпецкурсПараллельное программирование длявысокопроизводительных системсентябрь – декабрь 2015 г.Лектор доцент Н.Н.ПоповаЛекция 527 октября 2015 г.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 51ТемаГруппы процессовВиртуальные топологии MPIБлочные параллельные алгоритмыматричного умножения.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 52Группы и коммуникаторыСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 53Группы и коммуникаторыГруппа:Упорядоченное множество процессовКаждый процесс в группе имеет уникальный номерПроцесс может принадлежать нескольким группамКоммуникаторы:rank всегда относителен группыВсе обмены сообщений всегда проходят в рамкахкоммуникатораС точки зрения программирования группы и коммуникаторыэквивалентныГруппы и коммуникаторы – динамические объекты,должны создаваться и уничтожаться в процессеработы программыСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 54Типы коммуникаторовСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 55Типы коммуникаторыIntercommunicatorОбмены (только 2-ухточеченные) между процессами изразных коммуникаторовIntracommunicator:Все обмены сообщений всегда проходят в рамках одногокоммуникатораКоммуникатор может быть только одного типа: либо inter, либоintra !Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 56Создание новых коммуникаторов2 способа создания новых коммуникаторов:• Использовать функции для работы с группами икоммуникаторами (создать новую группупроцессов и по новой группе создатькоммуникатор, разделить коммуникатор и т.п.)• Использовать встроенные в MPI виртуальныетопологииСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 57Типичный шаблон работы1.2.3.4.5.6.Извлечение глобальной группы из коммуникатораMPI_COMM_WORLD, используя функциюMPI_Comm_groupФормирование новой группы как подмножестваглобальной группы, используя MPI_Group_incl илиMPI_Group_exclСоздание новый коммуникатор для новой группы,используя MPI_Comm_createОпределение номера процесса в новом коммуникаторе,используя MPI_Comm_rankОбмен сообщениями, используя функции MPIПо окончании освобождение созданных коммуникатораи группы, используя MPI_Comm_free и MPI_Group_freeСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 58main(int argc, char **argv) {int me, count, count2;void *send_buf, *recv_buf, *send_buf2, *recv_buf2;MPI_Group MPI_GROUP_WORLD, grprem;MPI_Comm commslave;static int ranks[] = {0};MPI_Init(&argc, &argv);MPI_Comm_group(MPI_COMM_WORLD, &MPI_GROUP_WORLD);MPI_Comm_rank(MPI_COMM_WORLD, &me);MPI_Group_excl(MPI_GROUP_WORLD, 1, ranks, &grprem);MPI_Comm_create(MPI_COMM_WORLD, grprem, &commslave);if(me != 0){ /* compute on slave */MPI_Reduce(send_buf,recv_buff,count, MPI_INT, MPI_SUM, 1,commslave);}/* zero falls through immediately to this reduce, others do later...
*/MPI_Reduce(send_buf2, recv_buff2, count2, MPI_INT, MPI_SUM, 0,MPI_COMM_WORLD);MPI_Comm_free(&commslave);MPI_Group_free(&MPI_GROUP_WORLD);MPI_Group_free(&grprem);MPI_Finalize();}Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 59Специальные типы MPIMPI_CommMPI_COMM_WORLD – коммуникатор для всех процессов приложения.MPI_COMM_NULL – значение, используемое для ошибочногокоммуникатора.MPI_COMM_SELF – коммуникатор, включающий только вызвавшийпроцесс.MPI_groupMPI_GROUP_EMPTY – пустая группа.MPI_GROUP_NULL – значение, используемое для ошибочной группыСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 510Количество процессов в группеРазмер группы (число процессов в группе)int MPI_Group_size(MPI_Group comm, int *size)Результат – число процессовЕсли указать MPI_GROUP_EMPTY, то size=0Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 511Номер процесса в группеНомер процесса в группеint MPI_Group_rank(MPI_Group comm, int *rank)Результат – номер процессов или MPI_UNDEFINEDСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 512Определение группы по коммуникаторуГруппа по коммуникаторуint MPI_Comm_group(MPI_Comm comm, MPI_Group*group)Пример:MPI_Group commGroup;MPI_Comm_group (MPI_COMM_WORLD, &commGroup);Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 513Включение процессов в группуВключение процессов в группуint MPI_Group_incl(MPI_Group comm, , int n, int*ranks, MPI_Group *newgroup)n- число процессов в новой группеranks – номера процессов в группе group, которыебудут составлять группу newgroup (выходнойпараметр);newgroup – новая группа, составленная изпроцессов из ranks, в порядке, определенном ranks(выходной параметр).В случае n=0 MPI_Group_incl вернет MPI_GROUP_EMPTY.Функция может применяться для перенумерации процессов вгруппе.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 514Исключение процессов из группыНомер процесса в группеint MPI_Group_excl(MPI_Group oldgroup, , int n, int *ranks, MPI_Group*newgroup)n - число процессов в массиве ranksranks – номера процессов в группе oldgroup, которые будутисключаться из группы oldgroup;newgroup – новая группа , не содержащая процессов с номерами изranks, порядок процессов такой же, как в группе group (выходнойпараметр).Каждый из n процессов с номерами из массива ranks долженсуществовать, иначе функция вернет ошибку.
В случае n=0MPI_Group_excl вернет группу group.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 515Сравнение групп процессовint MPI_Group_compare(MPI_Group group1,MPI_Group group2, int *result)MPI_Group_compare возвращает результат сравнения двухгрупп:MPI_IDENT – состав и порядок одинаковые в обеих группах;MPI_SIMILAR – обе группы содержат одинаковые процессы, ноих порядок в группах разный;MPI_UNEQUAL – различные состав и порядок групп.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 516Трансляция номеров процессов междугруппамиint MPI_Group_translate_ranks ( MPI_Group group_a,int n, int *ranks_a, MPI_Group group_b, int*ranks_b )Функция возвращает список номеров процессов из группыgroup_a в их номера в группе group_bMPI_UNDEFINED возвращается для процессов, которых нет вgroup_bСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 517Создание коммуникатора по группеint MPI_Comm_create (MPI_Comm comm, MPI_Group group,MPI_Comm *newcomm)comm – коммуникатор;group – группа, представляющая собой подмножество процессов,ассоциированное с коммуникатором comm;newcomm – новый коммуникатор (выходной параметр).Функия MPI_Comm_create создает новый коммуникатор, с которымассоциирована группа group.
Функция возвращает MPI_COMM_NULLпроцессам, не входящим в group.MPI_Comm_create завершится с ошибкой, если не все аргументы groupбудут одинаковыми в различных вызывающих функцию процессах, илиесли group не является подмножеством группы, ассоциированной скоммуникатором comm. Вызвать функцию должны все процессы,входящие в comm, даже если они не принадлежат новой группе.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 518Создание несколькихкоммуникаторовint MPI_Comm_split(MPI_Comm comm, int color, int key,MPI_Comm *newcomm)comm - коммуникатор;color - признак разделения на группы;key - параметр, определяющий нумерацию в новыхкоммуникаторах;newcomm – новый коммуникатор (выходнойпараметр).Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 519MPI_Comm_splitФункция разбивает все множество процессов,входящих в коммуникатор comm, на непересекающиесяподгруппы - одну подгруппу на каждое значениепараметра color (неотрицательное число).Каждая новая подгруппа содержит все процессыодного цвета.
Если в качестве color указано значениеMPI_UNDEFINED, то в newcomm будет возвращенозначение MPI_COMM_NULL.Это коллективная функция, но каждый процесс можетуказывать свои значения для параметров color и key..Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 520MPI_Comm_splitЗначение color определяет порядок нумерациипроцессов в новом коммуникаторе:- процессы с меньшим значением color получатменьший rank в новом коммуникаторе;-если значение color одинаково, то нумерацияпроцессов в новом коммуникаторе будет определятьсяпорядком следования в исходном коммуникаторе.Спецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 521ПримерБудет создано 3 группы процессов:{I,c,d}, {k,b,e,g,h}, {f}Процессы a a и j получат значение MPI_COMM_NULLСпецкурс "Параллельное программированиедля высокопроизводительных систем",лекция 522Пример MPI_Comm_splitMPI_comm comm, newcomm;int myid, color; .