кафедра ЮНЕСКО по НИТ1 Параллельное программирование MPI – massage passing interface
кафедра ЮНЕСКО по НИТ2 Содержание 1. Учебный кластер 2. ОС Red Hat Linux MPI (Message Passing Interface) – Интерфейс Передачи Сообщений 4. Установка MPIch для Windows 5. Компиляция и запуск 6. Обрамляющие функции MPI 7. Пример параллельной программы
кафедра ЮНЕСКО по НИТ3 Кластер ЮНЕСКО Состоит из 9 однородных ПК PIII – 966 MHz RAM – 64/128 Mb HDD – 20 Gb Сетевая среда – 100 Mb/s ОС – Linux Red Hat 9.0 Компилятор – GNU g77 Коммуникационная библиотека - MPI
кафедра ЮНЕСКО по НИТ4 Кластер ЮНЕСКО
кафедра ЮНЕСКО по НИТ5 Окно Linux Red Hat 9.0 Red Hat Linux release 9.0 (Strike) Kernel on an i586 Login: stud Password: stud1234 Last login: Fri Sep 3 10:46:00 from unesco1.kemsu.ru stud]$ mc -c
кафедра ЮНЕСКО по НИТ6 Окно Linux Red Hat 9.0 Red Hat Linux release 9.0 (Strike) Kernel on an i586 Login: stud Password: Last login: Fri Sep 3 10:46:00 from unesco1.kemsu.ru stud]$ telnet unesco9 или stud]$ telnet Red Hat Linux release 9.0 (Strike) Kernel on an i586 Login:
кафедра ЮНЕСКО по НИТ7 Окно Linux Red Hat 9.0 – запуск компилятора Си++ stud]$ g++ –o test.exe test.cpp stud]$./test.exe stud]$ g++ test.cpp first.cpp stud]$ g++ *.cpp
кафедра ЮНЕСКО по НИТ8 История создания MPI MPI: A Message-Passing Interface Standard (1.1, June 12, 1995) MPI-2: Extensions to the Message-Passing Interface (July18,1997) Marc Snir and William Gropp et al.: MPI: The Complete Reference. (2-volume set).The MIT Press, (excellent catching up of the standard MPI-1.2 and MPI-2 in a readable form) William Gropp, Ewing Lusk and Rajeev Thakur: Using MPI: Portable Parallel Programming With the Message-Passing Interface. MIT Press, Nov And Using MPI-2: Advanced Features of the Message-Passing Interface. MIT Press, Aug (or both in one volume, 725 pages, ISBN X)
кафедра ЮНЕСКО по НИТ9 MPI – интерфейс передачи сообщений MPI – стандарт на программный инструментарий для обеспечения связи между ветвями параллельного приложения MPI – это библиотека функций, обеспечивающая взаимодействие параллельных процессов с помощью механизма передачи сообщений Специфика MPI – осуществляет связь между процессорами, передавая необходимые данные между ветвями параллельного алгоритма
кафедра ЮНЕСКО по НИТ10 MPI для MPI принято писать программу, содержащую код всех ветвей сразу каждый экземпляр определяет свой порядковый номер в запущенном коллективе и в зависимости от этого номера и размера коллектива выполняет ту или иную ветвь алгоритма данная модель параллелизма называется SPMD (simple program/multiple data)
кафедра ЮНЕСКО по НИТ11 Парадигма параллельного программирования Парадигма последовательного программирования data pro- gram память процессор Парадигма параллельного программирования data sub- program data sub- program data sub- program data sub- program communication network распределенная память параллельные процессора
кафедра ЮНЕСКО по НИТ12 Состав пакета функции инициализации и закрытия MPI процессов функции, реализующие коммуникационные операции типа точка-точка функции, реализующие коллективные операции функции для работы с группами процессов и коммуникаторами функции для работы со структурами данных функции формирования топологии процессов
кафедра ЮНЕСКО по НИТ13 Характеристики функций Локальная функция Нелокальная функция Глобальная функция Блокирующая функция Неблокирующая функция
кафедра ЮНЕСКО по НИТ14 Запуск и компиляция ОС Red Hat Linux stud]$ mpiCC test.cpp stud]$ mpirun –np 1 a.out stud]$ mpiCC test.cpp -mpilog stud]$ mpiCC second.f -mpitrace
кафедра ЮНЕСКО по НИТ15 MPIch для Windows Инсталляционный пакет mpich.nt exe Версия MPICH 2 mpich p1-win-ia32.msi
кафедра ЮНЕСКО по НИТ16 Установка MPIch для Windows
кафедра ЮНЕСКО по НИТ17 Проверка установки MPIch для запуска на исполнение параллельных программ необходимо проверить запущен ли сервис smpd
кафедра ЮНЕСКО по НИТ18 Создание MPI проекта в MS Visual Studio 2008
кафедра ЮНЕСКО по НИТ19 Подключение библиотеки MPI
кафедра ЮНЕСКО по НИТ20 Библиотечные файлы MPI В проекте должны быть прописаны пути до библиотеки MPI и подключаемых (include) файлов путь к библиотечным файлам С:\Program Files\MPICH2\lib путь к подключаемым файлам С:\Program Files\MPICH2\include
кафедра ЮНЕСКО по НИТ21 MPI программа
кафедра ЮНЕСКО по НИТ22 Компиляция MPI
кафедра ЮНЕСКО по НИТ23 Копирование MPI программ
кафедра ЮНЕСКО по НИТ24 Копирование MPI библиотеки
кафедра ЮНЕСКО по НИТ25 Запуск MPI программ mpirun.exe -np 2 -localonly project_MPI.exe
кафедра ЮНЕСКО по НИТ26 Параметры MPI программы size – количество процессоров rank – номер процессора comm – коммуникатор
кафедра ЮНЕСКО по НИТ27 Соответствие типов тип MPIтип языка Си MPI_CHARsinged char MPI_SHORTsinged short int MPI_INTsinged int MPI_LONGsinged long int MPI_UNSIGNED_CHARunsinged char MPI_UNSIGNED_SHORTunsinged short int MPI_UNSIGNEDunsinged int MPI_UNSIGNED_LONGunsinged long int MPI_FLOATfloat MPI_DOUBLEdouble MPI_LONG_DOUBLElong double MPI_BYTE MPI_PACKED
кафедра ЮНЕСКО по НИТ28 Обрамляющие функции: Integer ierror call MPI_Init (ierror) Integer ierror call MPI_Finalize (ierror) Функция завершения MPI программ MPI_Finalize Функция инициализации MPI программ MPI_Init
кафедра ЮНЕСКО по НИТ29 Обрамляющие функции: Integer comm, size, ierror call MPI_Comm_size (comm, size, ierror) Integer comm, rank, ierror call MPI_Comm_rank (comm, rank, ierror) Функция определения номера процессора MPI_Comm_rank Функция определения числа процессоров в области связи MPI_Comm_size
кафедра ЮНЕСКО по НИТ30 Обрамляющие функции: Пример программы #include 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( "Process %d of %d is alive! \n",rank,size ); MPI_Finalize(); return(0); }
кафедра ЮНЕСКО по НИТ31 Функции для передачи и приема данных: 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) Функция приема сообщений MPI_Recv Функция передачи сообщений MPI_Send
кафедра ЮНЕСКО по НИТ32 Функция передачи сообщений MPI_Send Входные параметры: int MPI_Send( void *sbuf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm ) sbuf адрес начала расположения пересылаемых данных count число пересылаемых элементов datatype тип посылаемых элементов dest номер процесса-получателя в группе, связанной с коммуникатором comm tag идентификатор сообщения comm коммуникатор области связи
кафедра ЮНЕСКО по НИТ33 Функция приема сообщений MPI_Recv Входные параметры: int MPI_Recv( void *rbuf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status ) count число пересылаемых элементов datatyp e тип посылаемых элементов source номер процесса-отправителя tag идентификатор сообщения comm коммуникатор области связи Выходные параметры: rbuf адрес начала расположения принимаемого сообщения status атрибуты принятого сообщений
кафедра ЮНЕСКО по НИТ34 Обрамляющие функции: Функция отсчета времени MPI_Wtime double MPI_Wtime (void) Функция отсчета времени MPI_Wtime
кафедра ЮНЕСКО по НИТ35 Задание Отладить программу, выдающую сообщение о номере процессора