Лекция 5. Распределение данных. Основы MPI (1186103)
Текст из файла
Суперкомпьютерноемоделирование и технологии.сентябрь – декабрь 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 )Параллельное программирование для ВВС.Магистр.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.