Кафедра ЮНЕСКО по НИТ1 Параллельное программирование MPI – message passing interface Власенко Андрей Юрьевич
Кафедра ЮНЕСКО по НИТ2 Парадигма параллельного программирования Парадигма последовательного программирования data pro- gram память процессор Парадигма параллельного программирования data sub- program data sub- program data sub- program data sub- program communication network Память вычислительных узлов Процессоры узлов
Кафедра ЮНЕСКО по НИТ3 MPI – message passing interface (интерфейс передачи сообщений) MPI – стандарт на программный инструментарий для обеспечения связи между ветвями параллельного приложения. mpich – одна из самых распространённых реализаций стандарта MPI. Это библиотека функций, обеспечивающая взаимодействие параллельных процессов с помощью механизма передачи сообщений. hp?s=downloadshttp:// hp?s=downloads - отсюда можно скачать mpich
Кафедра ЮНЕСКО по НИТ4 История создания MPI MPI: A Message-Passing Interface Standard (1.1, June 12, 1995) MPI-2: Extensions to the Message-Passing Interface (July18,1997) MPI Standard: 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)
Кафедра ЮНЕСКО по НИТ5 MPI Для MPI принято писать программу, содержащую код всех ветвей сразу Ветвью MPI-программы является процесс многозадачной операционной системы. Каждый экземпляр определяет свой порядковый номер в запущенном коллективе и в зависимости от этого номера выполняет ту или иную ветвь алгоритма Данная модель параллелизма называется SPMD (simple program/multiple data)
Кафедра ЮНЕСКО по НИТ6 Состав пакета MPICH1 функции инициализации и закрытия MPI процессов функции, реализующие коммуникационные операции типа точка-точка (в обмене участвуют 2 процесса – передающий и принимающий) функции, реализующие коллективные операции функции для работы с группами процессов и коммуникаторами функции для работы со структурами данных функции формирования топологии процессов
Кафедра ЮНЕСКО по НИТ7 Учебный кластер кафедры ЮНЕСКО по НИТ Состоит из 3 однородных ПК Intel Core 2 Duo E6550 – 2.33 GHz RAM – 2 Gb HDD – 80 Gb Сетевая среда – Ethernet 100 Mb/s ОС – CentOS 5.6 Компилятор – gcc (GNU compiler collection) Коммуникационная библиотека – mpich2
Работа с учебным кластером. Программа Putty Кафедра ЮНЕСКО по НИТ8 hpchead.kemsu.ru
Кафедра ЮНЕСКО по НИТ9 Работа с учебным кластером. Авторизация Login: stud Password: stud1234
Кафедра ЮНЕСКО по НИТ10 Командная строка CentOS. Вызов Midnight Commander
Изменение кодировки на UTF-8 Кафедра ЮНЕСКО по НИТ11
Кафедра ЮНЕСКО по НИТ12 Вид Midnight Commander в кодировке UTF-8 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
Некоторые команды Linux $man touch – справка по команде «touch» $touch newfile - создание пустого файла $mv /home/stud/testfile /tmp/file - перемещение файла testfile и переименование в file $cp /home/stud/testfile /tmp/file - копирование файла testfile и переименование в file Кафедра ЮНЕСКО по НИТ13
Midnight Commander F3 – просмотр файла F4 – редактирование F5 – копирование файла F6 – перемещение файла F7 – создание новой директории Кафедра ЮНЕСКО по НИТ14 stud]$ gcc test.c –o test.out stud]$./test.out Компиляция и запуск C-программ
Кафедра ЮНЕСКО по НИТ15 Обрамляющие функции: int MPI_Init (int *argc, char **argv) int MPI_Finalize (void) Функция завершения MPI программ MPI_Finalize Функция инициализации MPI программ MPI_Init
Кафедра ЮНЕСКО по НИТ16 Обрамляющие функции: int MPI_Comm_size (MPI_Comm comm, int *size) int MPI_Comm_rank (MPI_Comm comm, int *rank) Функция определения номера процессора MPI_Comm_rank Функция определения числа процессоров в области связи MPI_Comm_size Comm – коммуникатор. Идентификатор группы запущенных программой параллельных процессов, которые могут обмениваться между собой сообщениями. Как получатель, так и отправитель должны принадлежать указанной группе. Все запущенные процессы принадлежат группе с коммуникатором MPI_COMM_WORLD.
Кафедра ЮНЕСКО по НИТ17 int MPI_Get_processor_name( char *name, int *resultlen) Функция определения имени вычислительного узла, на котором запущен данный процесс MPI_Get_processor_name out: name – имя узла out: resultlen – длина массива name
Кафедра ЮНЕСКО по НИТ18 Обрамляющие функции: Пример программы #include mpi.h #include int main( int argc, char *argv[ ] ) { int rank; MPI_Init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); printf( "Process %d is alive! \n", rank ); MPI_Finalize(); return(0); }
Кафедра ЮНЕСКО по НИТ19 Запуск и компиляция MPI- программ stud]$ mpicc test.c mpirun –np 5 –f /home/stud/machines a.out mpicxx second.cpp./run.sh 5 a.out mpicc test.c –o test.out
Кафедра ЮНЕСКО по НИТ20 Задание 1 Отладить и запустить MPI-программу, выдающую сообщение: о номере процесса; об имени узла, на котором запущен каждый из процессов; об общем количестве процессов.
Кафедра ЮНЕСКО по НИТ21 Обрамляющие функции: Функция отсчета времени MPI_Wtime double MPI_Wtime (void) Функция отсчета времени MPI_Wtime Возвращает время в секундах (дробное число), прошедшее с некоторого момента в прошлом.
Кафедра ЮНЕСКО по НИТ22 Задание 2 Создать MPI-программу, которая: 1) подсчитывает для каждого процесса сумму: 0+1+…+rank*10000, где rank – номер MPI-процесса в коммуникаторе MPI_COMM_WORLD 2) для каждого процесса выводит время, которое было затрачено на суммирование.