MPI и OpenMP (по Бахтину) (Лекции), страница 3
Описание файла
Файл "MPI и OpenMP (по Бахтину)" внутри архива находится в папке "Лекции". PDF-файл из архива "Лекции", который расположен в категории "". Всё это находится в предмете "суперкомпьютерное моделирование и технологии" из 11 семестр (3 семестр магистратуры), которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 3 страницы из PDF
MPI/OpenMP-версияfor(i=1; i<=nrow; i++){if (((i==1)&&(myrank==0))||((i==nrow)&&(myrank==ranksize-1))) continue;#pragma omp parallel forfor(j=1; j<=L-2; j++)B[i-1][j] = (A[i-1][j]+A[i+1][j]+A[i][j-1]+A[i][j+1])/4.;}}/*DO it*/printf("%d: Time of task=%lf\n",myrank,MPI_Wtime()-t1);MPI_Finalize ();return 0;}21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP57 из 81Гибридная модель DVM/OpenMPДанныеCoreДанныеДанныеВычисленияВычисленияOpenMPOpenMPCore … CoreУзел 021 октябряМосква, 2011CoreCore … CoreУзел NГибридная модель программирования MPI/OpenMP58 из 81Алгоритм Якоби. DVM/OpenMP-версияPROGRAMJAC_OpenMP_DVMPARAMETERREAL(L=1000, ITMAX=100)A(L,L), B(L,L)CDVM$ DISTRIBUTE( BLOCK, BLOCK) :: ACDVM$ ALIGN B(I,J) WITH A(I,J)PRINT *, '********** TEST_JACOBI **********'DO IT = 1, ITMAXCDVM$PARALLEL (J,I) ON A(I, J)C$OMPPARALLEL DO COLLAPSE (2)DO J = 2, L-1DO I = 2, L-1A(I, J) = B(I, J)ENDDOENDDO21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP59 из 81Алгоритм Якоби.
DVM/OpenMP-версияCDVM$PARALLEL (J,I) ON B(I, J), SHADOW_RENEW (A)C$OMPPARALLEL DO COLLAPSE (2)DO J = 2, L-1DO I = 2, L-1B(I, J) = (A(I-1, J) + A(I, J-1) + A(I+1, J) + A(I, J+1)) / 4ENDDOENDDOENDDOEND21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP60 из 81Тесты NAS MultiZoneBT (Block Tridiagonal Solver) 3D Навье-Стокс, методпеременных направленийLU (Lower-Upper Solver) 3D Навье-Стокс, метод верхнейрелаксацииSP (Scalar PentadiagonalSolver) 3D Навье-Стокс, BeamWarning approximate factorizationhttp://www.nas.nasa.gov/News/Techreports/2003/PDF/nas-03-010.pdf21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP61 из 81Тесты NAS MultiZone21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP62 из 81Тест SP-MZ (класс A) на IBM eServer pSeries 690 Regatta2 процессора4 процессора1004590,479041,7439,564083,676,358037,836,9536,0235,33566,877030602550204015302010105001x22x18 процессов1x4MPI25DVM1621,64 21,6321,7620,8719,822020,44 20,872x2144x116 процессоров14,9812,9712,7219,21211,1110,9811,441010,479,9210,4110158106452001x821 октябряМосква, 20112x44x28x11x162x84x4Гибридная модель программирования MPI/OpenMP8x216x163 из 81Тест LU-MZ (класс A) на IBM eServer pSeries 690 Regatta2 процессора4 процессора80,0035,0071,1331,19 31,1566,2970,0028,5830,0060,13 60,8560,0032,38 31,7031,1625,0050,0020,0040,0015,0030,0020,0010,0010,005,000,001x20,002x11x48 процессоровMPI2x24x116 процессоровDVM16,0035,0031,19 31,1514,0713,4914,0030,0012,3612,0312,0025,0020,0010,7821,5510,0019,23 19,2216,838,1915,619,799,368,9817,868,428,0015,006,0010,004,005,002,000,000,001x821 октябряМосква, 20112x44x28x11x162x84x4Гибридная модель программирования MPI/OpenMP8x216x164 из 81Тест BT-MZ (класс A) на IBM eServer pSeries 690 Regattaзоны от 13 x 13 x 16 и до 58 x 58 x 162 процессора4 процессора100,0090,0045,0089,5788,5384,2438,1340,0078,7880,0041,75 41,5540,3939,8336,5435,0070,0030,0060,0025,0050,0020,0040,0030,0015,0020,0010,0010,005,000,001x20,002x11x48 процессоровMPI40,0016 процессоровDVM32,6035,7335,0030,4630,0030,0025,0023,25 22,9320,7321,7521,1920,0019,0920,0015,8915,3215,0013,7315,0013,2011,1616,8212,4710,5710,0010,005,005,000,000,001x821 октябряМосква, 20114x135,0034,6825,002x22x44x28x11x162x84x4Гибридная модель программирования MPI/OpenMP8x216x165 из 81Расчет дозвукового обтекания летательного аппарата21 октябряМосква, 2011Задача810 областейсредняязагрузкаMaxзагрузка75 процессоров1925819296128 процессоров1128411648256 процессоров564211648384 процессоров376111648512 процессоров282111648Гибридная модель программирования MPI/OpenMP66 из 81Преимущества гибридной модели MPI/OpenMPЛиквидация или сокращение дублирования данных в памятиузла.Дополнительный уровень параллелизма на OpenMPреализовать проще, чем на MPI (например, когда впрограмме есть два уровня параллелизма – параллелизммежду подзадачами и параллелизм внутри подзадачи).Улучшение балансировки на многоблочных задачах применьшей трудоемкости реализации еще одного уровняпараллелизма.21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP67 из 81Алгоритм Якоби.
ОптимизированнаяMPI/OpenMP-версия/****** iteration loop *************************/t1=MPI_Wtime();#pragma omp parallel default(none) private(it,i,j) shared (A,B,myrank,nrow,ranksize,ll,shift,req,status)for(it=1; it<=ITMAX; it++){for(i=1; i<=nrow; i++){if (((i==1)&&(myrank==0))||((i==nrow)&&(myrank==ranksize-1)))continue;#pragma omp for nowaitfor(j=1; j<=L-2; j++){A[i][j] = B[i-1][j];}}21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP68 из 81Алгоритм Якоби. ОптимизированнаяMPI/OpenMP-версия#pragma omp barrier#pragma omp single{if(myrank!=0)MPI_Irecv(&A[0][0],L,MPI_DOUBLE, myrank-1, 1215,MPI_COMM_WORLD, &req[0]);if(myrank!=ranksize-1)MPI_Isend(&A[nrow][0],L,MPI_DOUBLE, myrank+1, 1215,MPI_COMM_WORLD,&req[2]);if(myrank!=ranksize-1)MPI_Irecv(&A[nrow+1][0],L,MPI_DOUBLE, myrank+1, 1216,MPI_COMM_WORLD, &req[3]);if(myrank!=0)MPI_Isend(&A[1][0],L,MPI_DOUBLE, myrank-1, 1216,MPI_COMM_WORLD,&req[1]);ll=4; shift=0; if (myrank==0) {ll=2;shift=2;}if (myrank==ranksize-1) {ll=2;}MPI_Waitall(ll,&req[shift],&status[0]);21 октябряМосква, 2011}Гибридная модель программирования MPI/OpenMP69 из 81Алгоритм Якоби.
ОптимизированнаяMPI/OpenMP-версияfor(i=1; i<=nrow; i++){if (((i==1)&&(myrank==0))||((i==nrow)&&(myrank==ranksize-1))) continue;#pragma omp for nowaitfor(j=1; j<=L-2; j++)B[i-1][j] = (A[i-1][j]+A[i+1][j]+A[i][j-1]+A[i][j+1])/4.;}}/*DO it*/printf("%d: Time of task=%lf\n",myrank,MPI_Wtime()-t1);MPI_Finalize ();return 0;}21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP70 из 81Привязка процессов к ядрамIntel MPIexport I_MPI_PIN_DOMAIN=omp (node)mpirun …илиmpirun –env I_MPI_PIN_DOMAIN omp ...OpenMPImpirun –bind-to-none ....MVAPICHmpirun VIADEV_USE_AFFINITY=0 …21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP71 из 81Привязка процессов к ядрам#include <sched.h>#include <omp.h>void SetAffinity (int rank) {int MPI_PROCESSES_PER_NODE =omp_get_num_procs()/omp_get_max_threads ();#pragma omp parallel{cpu_set_t mask;CPU_ZERO(&mask);int cpu = (rank% MPI_PROCESSES_PER_NODE)*omp_get_num_threads() +omp_get_thread_num ();CPU_SET(cpu,&mask);sched_setaffinity ((pid_t)0, sizeof(cpu_set_t),&mask);}}21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP72 из 81Литература OpenMP Application Program Interface Version 3.1, July 2011.http://www.openmp.org/mp-documents/OpenMP3.1.pdf MPI: A Message-Passing Interface Standard Version 2.2, September2009.http://www.mpi-forum.org/docs/mpi-2.2/mpi22-report.pdf Антонов А.С.
Параллельное программирование с использованиемтехнологии OpenMP: Учебное пособие.-М.: Изд-во МГУ, 2009.http://parallel.ru/info/parallel/openmp/OpenMP.pdf Антонов А.С. Параллельное программирование с использованиемтехнологии MPI: Учебное пособие.-М.: Изд-во МГУ, 2004.http://parallel.ru/tech/tech_dev/MPI/mpibook.pdf Воеводин В.В., Воеводин Вл.В. Параллельные вычисления.
– СПб.:БХВ-Петербург, 2002. Презентацияftp://ftp.keldysh.ru/K_student/MSU2011/MSU2011_MPI_OpenMP1.pdf21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP73 из 81АвторБахтин Владимир Александрович, кандидат физико-математических наук,заведующий сектором Института прикладной математики им. М.В. Келдыша РАН,ассистент кафедры системного программированния факультета ВМК, МГУ им. М. В.Ломоносоваbakhtin@keldysh.ru21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP74 из 81Инициализация и завершение MPI программПервой вызываемой функцией MPI должна быть функция:int MPI_Init ( int *agrc, char ***argv )Для инициализации среды выполнения MPI-программы.
Параметрами функции являютсяколичество аргументов в командной строке и текст самой командной строки.Последней вызываемой функцией MPI обязательно должна являться функция:int MPI_Finalize (void)Обратно21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP75 из 81Определение количества и ранга процессовОпределение количества процессов в выполняемой параллельной программеосуществляется при помощи функции:int MPI_Comm_size ( MPI_Comm comm, int *size ).Для определения ранга процесса используется функция:int MPI_Comm_rank ( MPI_Comm comm, int *rank ).Обратно21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP76 из 81Неблокирующие обмены данными междупроцессорамиДля передачи сообщения процесс-отправитель должен выполнить функцию:int MPI_Isend(void *buf, int count, MPI_Datatype type, int dest,int tag, MPI_Comm comm, MPI_Request *request),где• buf - адрес буфера памяти, в котором располагаются данные отправляемого сообщения,• count - количество элементов данных в сообщении,• type - тип элементов данных пересылаемого сообщения,• dest - ранг процесса, которому отправляется сообщение,Обратно• tag - значение-тег, используемое для идентификации сообщений,• comm - коммуникатор, в рамках которого выполняется передача данных.Для приема сообщения процесс-получатель должен выполнить функцию:int MPI_Irecv(void *buf, int count, MPI_Datatype type, int source,int tag, MPI_Comm comm, MPI_Status *status, MPI_Request *request),где•buf, count, type - буфер памяти для приема сообщения, назначение каждого отдельногопараметра соответствует описанию в MPI_Send,•source - ранг процесса, от которого должен быть выполнен прием сообщения,•tag - тег сообщения, которое должно быть принято для процесса,•comm - коммуникатор, в рамках которого выполняется передача данных,•status - указатель на структуру данных с информацией о результате выполнения операцииприема данных.21 октября77 из 81Гибридная модель программирования MPI/OpenMPМосква, 2011MPI_WaitallОжидание завершения всех операций обмена осуществляется при помощи функции:int MPI_Waitall(int count,MPI_Request array_of_requests[],MPI_Status array_of_statuses[])Обратно21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP78 из 81MPI_Cart_createСоздание декартовой топологии (решетки) в MPI:int MPI_Cart_create(MPI_Comm oldcomm, int ndims, int *dims, int *periods,int reorder, MPI_Comm *cartcomm),где:• oldcomm - исходный коммуникатор,• ndims - размерность декартовой решетки,• dims - массив длины ndims, задает количество процессов в каждом измерении решетки,• periods - массив длины ndims, определяет, является ли решетка периодической вдолькаждого измерения,• reorder - параметр допустимости изменения нумерации процессов,• cartcomm - создаваемый коммуникатор с декартовой топологией процессов.Обратно21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP79 из 81MPI_Cart_shiftФункция:int MPI_Card_shift(MPI_Comm comm, int dir, int disp, int *source, int *dst)для получения номеров посылающего(source) и принимающего (dst) процессов вдекартовой топологии коммуникатора (comm) для осуществления сдвига вдоль измеренияdir на величину disp.Обратно21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP80 из 81MPI_Card_coordsОпределение декартовых координат процесса по его рангу:int MPI_Card_coords(MPI_Comm comm,int rank,int ndims,int *coords),где:•comm - коммуникатор с топологией решетки,• rank - ранг процесса, для которого определяются декартовы координаты,• ndims - размерность решетки,• coords - возвращаемые функцией декартовы координаты процесса.Обратно21 октябряМосква, 2011Гибридная модель программирования MPI/OpenMP81 из 81MPI_Type_vectorДля снижения сложности в MPI предусмотрено несколько различных способовконструирования производных типов:• Непрерывный способ позволяет определить непрерывный набор элементовсуществующего типа как новый производный тип,• Векторный способ обеспечивает создание нового производного типа как набораэлементов существующего типа, между элементами которого существуют регулярныепромежутки по памяти.