Лекция 5. Распределение данных. Основы MPI (Электронные лекции)
Описание файла
Файл "Лекция 5. Распределение данных. Основы MPI" внутри архива находится в папке "Электронные лекции 2016 года". PDF-файл из архива "Электронные лекции", который расположен в категории "". Всё это находится в предмете "суперкомпьютерное моделирование и технологии" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
Суперкомпьютерноемоделирование и технологии.сентябрь – декабрь 2016 г.Лекция21 сентября 2016 г.Материалы лекции представлены на сайтеВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаЗадание 2. Исследование эффективностирешения задачи Дирихле для уравненияЛапласа (один из вариантов)Задача Дирихле для уравнения Лапласа (1). 2u 2u 2u 2 2 2 0, ( x, y, z ) D,yz xu ( x, y, z ) g ( x, y, z ), ( x, y, z ) D 0 ,(1)где u(x, y, z) - функция, удовлетворяющая в области D уравнениюЛапласа и принимающая на границе D0 области D значения g(x, y, z).М.В.Абакумов, А.В.Гулин Лекции по численным методамматематической физики. Учебное пособие. – М.-:ИНФРА-М, 2013.158ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаПостановка задачи.Разностная схема.Численный подход к решению задачи (1) основан назамене производных соответствующими конечнымиразностями (2).ui 1, j ,k 2ui , j ,k ui 1, j ,kh2ui , j 1,k 2ui , j ,k ui , j 1,kh2ui , j ,k 1 2ui , j ,k ui , j ,k 1h2 0, (2)где h 0 - шаг сетки, u i , j ,k - значение функции u(x, y, z) в точкеx xi ih, i 0, M 1, y y j jh, j 0, N 1, z z k kh, h 0, L 1,где M, N, L - количество внутренних узлов по каждой координатев области D.ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаМетод Якоби. итерационный метод Якоби (3).n 1i 1, j , kun 1i 1, j , kun 1i , j 1, kun 1i , j 1, kuni , j ,k (uuni , j ,k g i , j ,k , ( x, y, z ) D , n 1,2,..un 1i , j , k 10где n - номер итерации.ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.Поповаun 1i , j , k 1)/6(3)Уравнение Лапласа (2D)u u 2 02xy22x, y [0,1](1)Краевые условия:u ( x,0 ) sin (x)0u ( x,1) sin (x)ex1x0x1u (0, y ) u (1, y ) 00y1(2)Аналитическое решение:u( x, y) sin(x)e xyx, y [0,1]ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.Попова(3)Дискретизация уравнения Лапласаuin, 1j uin1,j uin1,j ui,jn 1 ui,jn 14i 1,2, ,m; j 1,2, ,m(4)где n и n+1 текущий и следующий шаг,ui,jn u n(xi ,y j )i 0,1,2, ,m 1; j 0,1,2, ,m 1 u n(ix, jy )Для простотыx y 1m1ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.Попова(5)Вычислительная областьu(x,1) sin(x)e xy, jx, iu(1,y) 0u(0,y) 0u ( x,0) sin (x)uin, j 1 uin1,j uin1,j ui,jn 1 ui,jn 14i 1,2, ,m; j 1,2, ,mВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.Попова5-точечный шаблонuin, j 1 uin1,j uin1,j ui,jn 1 ui,jn 1xx o x4xвнутренняя область, накоторой ищется решениеуравнения(i, j)граничная область.xx o xxВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаМетод Якоби3.Задать начальные значения u во всех внутренних точках (i,j) вмомент времени n=0.Используя 5-точечный шаблон, вычислить значения воn 1внутренних точках ui , j (i,j).Завершить процесс, если заданная точность достигнута.4.Иначе:5.Перейти на шаг 2.1.2.uin, j uin, j 1для всех внутренних точек.Это очень простая схема.
Медленно сходится, поэтому не используетсядля решения реальных задач.ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаРешение (линии уровня)ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаПараллельная реализация1D Domain Decomposition2D Domain DecompositionПроцесс 3Процесс 2Процесс 3Процесс 2Процесс 1Процесс 0Процесс 0ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаПроцесс 1Распределение данных – 1D5-точечная схема требуетзначений от соседнихпотоковНеобходим обменданными на границахобластиxx o xxПроцесс 2xx o xПроцесс 1xxx o xВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаxПроцесс 0Схема передачи данныхПроцессk+1Процесс kТекущийпроцессПроцессk-1ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаОбзор технологий параллельногопрограммирования.Основные возможности MPI.ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаПример параллельной программыпрограммы (C, OpenMP)Сумма элементов массива#include <stdio.h>#define N 1024int main(){ double sum;double a[N];int i, n =N;for (i=0; i<n; i++){a[i] = i*0.5; }sum =0;#pragma omp for reduction (+:sum)for (i=0; i<n; i++)sum = sum+a[i];printf (“Sum=%f\n”, sum);}МФК МГУ, 2015г.
Курс "Суперкомпьютеры иквантовая и нформатика"Пример параллельной программыпрограммы (C, MPI)#include <stdio.h>#include <mpi.h>#define N 1024int main(int argc, char *argv[]){ double sum, all_sum;double a[N];int i, n =N;int size, myrank;MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD,&rank);MPI_Comm_size(MPI_COMM_WORLD,&size);n= n/ size;for (i=rank*n; i<n; i++){a[i] = i*0.5; }sum =0;for (i=rank*n; i<n; i++)sum = sum+a[i];MPI_Reduce(& sum,& all_sum, 1,MPI_DOUBLE, MPI_SUM, 0,MPI_COMM_WORLD);If ( !rank)printf (“Sum =%f\n”, all_sum);MPI_Finalize();return 0;}МФК МГУ, 2015 г. Курс "Суперкомпьютеры иквантовая и нформатика"Гибрид: MPI+OpenMP#include <stdio.h>#include <mpi.h>#define N 1024int main(int argc, char *argv[]){ double sum, all_sum;double a[N];int i, n =N;int size, myrank;MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD,&rank);MPI_Comm_size(MPI_COMM_WORLD,&size);n= n/ size;for (i=rank*n; i<n; i++){a[i] = i*0.5; }sum =0;#pragma omp for reduction (+:sum)for (i=rank*n; i<n; i++)sum = sum+a[i];MPI_Reduce(& sum,& all_sum, 1,MPI_DOUBLE, MPI_SUM, 0,MPI_COMM_WORLD);If ( !rank)printf (“Sum =%f\n”, all_sum);MPI_Finalize();return 0;}МФК МГУ, 2015 г.
Курс "Суперкомпьютеры иквантовая и нформатика"MPIMPI 1.1 Standard разрабатывался 92-94MPI 2.0 - 95-97MPI 2.1 - 2008MPI 3.1 – 2015Стандартыhttp://mpi-forum.org/docs/http://www.mpi-forum.org/docs/docs.htmlОписание функций http://www-unix.mcs.anl.gov/mpi/www/ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаРеализации MPIMPICHLAM/MPIMvapichOpenMPIКоммерческие реализации Intel,IBM идр.ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаМодель MPIПараллельная программа состоит из процессов,процессы могут быть многопоточными.MPI реализует передачу сообщений междупроцессами.Межпроцессное взаимодействие предполагает: синхронизацию перемещение данных из адресного пространстваодного процесса в адресное пространство другогопроцесса.ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаМодель MPI-программ• SPMD – Single ProgramMultiple Data• Одна и та же программавыполняется различнымипроцессорами• Управляющимиоператорами выбираютсяразличные частипрограммы на каждомпроцессоре.Текст программыКомпиляция:одна программаДля всех процессоровИсполняемый кодProcessor 0ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаProcessorМодель выполненияMPI- программыЗапуск: mpirunПри запуске указываем число требуемых процессоров np иназвание программы: пример:mpirun –np 3 progКаждый процесс MPI-программы получает два значения: np – число процессов rank из диапазона [0 … np-1] – номер процессаЛюбые два процесса могут непосредственно обмениватьсяданными с помощью функций передачи сообщенийВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаОсновы передачи данных в MPIТехнология передачи данных MPI предполагаеткооперативный обмен.Данные посылаются одним процессом ипринимаются другим.Передача и синхронизация совмещены.Process 0Process 1Send(data)Receive(data)ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаОсновные группы функций MPIОпределение средыПередачи «точка-точка»Коллективные операцииПроизводные типы данныхГруппы процессовВиртуальные топологииОдносторонние передачиПараллельный ввод-выводВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаОсновные понятияПроцессы объединяются в группы.Каждое сообщение посылается в рамках некоторогоконтекста и должно быть получено в том же контексте.Группа и контекст вместе определяют коммуникатор.Процесс идентифицируется своим номером в группе,ассоциированной с коммуникатором.Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 225Понятие коммуникатора MPIВсе обращения к MPI функциям содержаткоммуникатор, как параметр.Наиболее часто используемый коммуникаторMPI_COMM_WORLD:- определяется при вызове MPI_Initсодержит ВСЕ процессы программыДругие предопределенные коммуникаторы:- MPI_COMM_SELF – только один (собственный)процесс--MPI_COMM_NULL – пустой коммуникаторСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 226Типы данных MPIДанные в сообщении описываются тройкой:(address, count, datatype), гдеdatatype определяется рекурсивно как :предопределенный базовый тип, соответствующий типуданных в базовом языке (например, MPI_INT,MPI_DOUBLE_PRECISION)Непрерывный массив MPI типовВекторный типИндексированыый типПроизвольные структурыMPI включает функции для построенияпользовательских типов данных, например, типаданных, описывающих пары (int, float).Спецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 227Базовые MPI-типы данныхMPI datatypeC datatypeMPI_CHARsigned charMPI_SHORTsigned short intMPI_INTsigned intMPI_LONGsigned long intMPI_UNSIGNED_CHARunsigned charMPI_UNSIGNED_SHORTunsigned short intMPI_UNSIGNEDunsigned intMPI_UNSIGNED_LONGunsigned long intMPI_FLOATfloatMPI_DOUBLEdoubleMPI_LONG_DOUBLElong doubleСпецкурс "Параллельное программированиедля высокопроизводительных систем",Лекция 228Специальные типы MPIMPI_CommMPI_StatusMPI_datatypeВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаПонятие тэгаСообщение сопровождается определяемымпользователем признаком – целым числом – тэгомдля идентификации принимаемого сообщенияТеги сообщений у отправителя и получателя должныбыть согласованы.
Можно указать в качествезначения тэга константу MPI_ANY_TAG.ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаMPI helloworld.c#include <stdio.h>#include <mpi.h>int main(int argc, char **argv){MPI_Init(&argc, &argv);printf("Hello, MPI world\n");MPI_Finalize();return 0; }ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаФункции определения средыint MPI_Init(int *argc, char ***argv)должна первым вызовом, вызывается только один разint MPI_Comm_size(MPI_Comm comm, int *size)число процессов в коммуникатореint MPI_Comm_rank(MPI_Comm comm, int *rank)номер процесса в коммуникаторе (нумерация с 0)int MPI_Finalize()завершает работу процессаint MPI_Abort (MPI_Comm_size(MPI_Comm comm,int*errorcode)завершает работу программыВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаИнициализация MPIMPI_Init должна быть первым вызовом,вызывается только один разC:int MPI_Init(int *argc, char ***argv)http://www.mcs.anl.gov/research/projects/mpi/www/www3/MPI_Init.htmlВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаОбработка ошибок MPI-функцийОпределяется константой MPI_SUCCESSIint error;……error = MPI_Init(&argc, &argv));If (error != MPI_SUCCESS){fprintf (stderr, “ MPI_Init error \n”);return 1;}ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаMPI_Comm_sizeКоличество процессов в коммуникатореРазмер коммуникатораint MPI_Comm_size(MPI_Comm comm, int*size)Результат – число процессовhttp://www-unix.mcs.anl.gov/mpi/www/www3/MPI_Comm_size.htmlВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаMPI_Comm_rankномер процесса (process rank)Process ID в коммуникаторе Начинается с 0 до (n-1), где n – числопроцессовИспользуется для определения номера процессаотправителя и получателяint MPI_Comm_rank(MPI_Comm comm, int*rank)Результат – номер процессаВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаЗавершение MPI-процессовНикаких вызовов MPI функций послеint MPI_Finalize()int MPI_Abort (MPI_Comm_size(MPI_Comm comm, int*errorcode)ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаHello, MPI world!#include <stdio.h>#include "mpi.h"int main(int argc, char **argv){int rank, size;MPI_Init(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD, &rank);MPI_Comm_size(MPI_COMM_WORLD, &size);printf("Hello, MPI world! I am %d of %d\n“,rank,size);MPI_Finalize();return 0; }ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаТрансляция MPI-программТрансляцияmpicc –o <имя_программы> <имя>.c <опции>Например:mpicc –o hw helloworld.cЗапуск в интерактивном режимеmpirun –np 128 hwВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаВзаимодействие «точка-точка»Самая простая форма обменасообщениемОдин процесс посылает сообщениядругомуНесколько вариантов реализации того,как пересылка и выполнение программысовмещаютсяВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаВарианты передачи «точка-точка»Синхронные пересылкиАсинронные передачиБлокирующие передачиНеблокирующие передачиВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаФункции MPI передачи«точка-точка»ВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаБлокирующие и неблокирующие передачиОпределяют, при каких условиях операциипередачи завершаются:- Блокирующие: возврат из функций передачисообщений только по завершению передачи- Неблокирующие : немедленный возврат изфункций, пользователь долженконтролировать завершение передачВМК МГУ, "Суперкомпьютерноемоделирование и технологии", лекторН.Н.ПоповаОснова 2-точечных обменовint MPI_Send(void *buf,int count, MPI_Datatype datatype,int dest, int tag,MPI_Comm comm)int MPI_Recv(void *buf,int count, MPI_Datatype datatype,int source, int tag,MPI_Comm comm, MPI_Status *status )Параллельное программирование для ВВС.Магистр.