Практические основы параллельного программирования. Посыпкин Михаил Анатольевич www.ispras.ru/~posypkin.

Презентация:



Advertisements
Похожие презентации
Основы параллельного программирования Посыпкин Михаил Анатольевич.
Advertisements

Параллельные аппаратные архитектуры и модели программирования Традиционная архитектура фон Неймана Расширение традиционной архитектуры Сопроцессоры Многоядерные.
Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 4 Томский политехнический университет.
Лекция 6 Множественное распараллеливание на Linux кластере с помощью библиотеки MPI 1. Компиляция и запуск программы на кластере. 2. SIMD модель параллельного.
Введение в параллельные вычисления. Технология программирования MPI (день второй) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 8 Томский политехнический университет.
Технология программирования MPI Антонов Александр Сергеевич, к.ф.-м.н., с.н.с. лаборатории Параллельных информационных технологий НИВЦ МГУ.
MPI за 90 минут Метод погружения Сергей Петрович Нечаев, Сибирский Суперкомпьютерный центр.
Кафедра ЮНЕСКО по НИТ1 Параллельное программирование MPI – massage passing interface.
Кафедра ЮНЕСКО по НИТ1 Передача упакованных данных Параллельное программирование.
Кафедра ЮНЕСКО по НИТ1 Коммуникационные операции «точка-точка» параллельное программирование.
Интерфейс передачи сообщений: MPI. Базовые архитектуры Массивно-параллельные системы (MPP) Симметричные мультипроцессорные системы (SMP) Системы с неоднородным.
Основы параллельного программирования с использованием MPI Лекция 5 Немнюгин Сергей Андреевич Санкт-Петербургский государственный университет физический.
Многопоточное программирование. Виды параллелизма. Общая память Распределенная память.
КОЛЛЕКТИВНЫЕ ВЗАИМОДЕЙСТВИЯ ПРОЦЕССОВ Барьерная синхронизация всех процессов группы. Широковещательная передача (broadcast) от одного процесса всем остальным.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 4 Методы разработки параллельных программ при использования интерфейса передачи.
Введение в параллельные вычисления. Технология программирования MPI (день четвертый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Лекция 1 Классификация С++. Парадигмы программирования Императивная Функциональная Декларативная (логическая) Инструкция 1 Инструкция 2 Инструкция 3 Инструкция.
Кафедра ЮНЕСКО по НИТ1 Коллективные коммуникационные операции параллельное программирование.
Кафедра ЮНЕСКО по НИТ1 Параллельное программирование MPI – message passing interface Власенко Андрей Юрьевич.
Транксрипт:

Практические основы параллельного программирования. Посыпкин Михаил Анатольевич

Параллельное программирование Приложения требуют увеличения производительности компьютеров. Производительность процессора и памяти ограничена физическими характеристиками применяемых материалов. Многие задачи содержат независимые компоненты, которые могут решаться одновременно (т.е. параллельно).

Параллельное программирование Перечисленное приводит к естественному решению – увеличивать число компонент оборудования, участвующего в решении задач. В частности, увеличивается число функциональных устройств одного процессора и общее число процессоров.

Многопроцессорный параллелизм В решении задачи принимает участие несколько (более одного) процессоров, взаимодействующих между собой. CPU

Спектр задач параллельного программирования Математическое моделирование: Газовая и гидро-динамика. Химические реакции. Процессы в полупроводниках. Оптимизация: Дискретное и линейное программирование. Общая задача нахождения экстремума. Оптимальный поиск: Дискретная оптимизация. Распознавание образов. Автоматическая верификация и доказательство теорем.

Виды параллелизма. Общая память Распределенная память

Аппаратные ресурсы МСЦ Общая память: HP V-Class HP Superdome Гибридная память: MVS-1000M (768 x Alpha 21264) MVS 15000BM (768 x IBM Power 970) кластеры Athlon, Xeon, IBM

Средства параллельного программирования Общая память Распределенная память Системные средства threadssockets Языки C/C++, Fortran 95 HPF, DVM, mpC, Charm ++, Occam Специальные библиотеки и пакеты OpenMPMPI PVM

Библиотека MPI Message Passing Interface

Структура MPI API (варианты для Си, C++, Fortran, Java). Средства компиляции и запуска приложения.

SPMD-модель Разные процессы выполняют разные части одного и того же кода.

Сборка MPI-приложения. Сборка MPI-приложения осуществляется с помощью специальной утилиты. В случае Си – mpicc. Пример: mpicc –o mpihello mpihello.c Запуск MPI-приложения осуществляется с помощью команды mpirun. mpirun –np 4 mpihello

Простейшая MPI-программа #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( "I am %d of %d\n", rank, size ); MPI_Finalize(); return 0; }

Функции инициализации и завершения работы. int MPI_Init(int* argc,char*** argv) argc – указатель на счетчик аргументов командной строки argv – указатель на список аргументов int MPI_Finalize()

Функции определения ранга и числа процессов. int MPI_Comm_size (MPI_Comm comm, int* size ) comm - коммуникатор size – число процессов int MPI_Comm_rank(MPI_Comm comm, int* rank) comm – коммуникатор rank – ранг процесса

Простейшая пересылка. #include #define M 3 #define VAL 5 #define ID 1 static int size, rank; void initArray(int* a, int m, int v) { int i; for(i = 0; i < m; i ++) a[i] = v; } void printArray(int* a, int m) { int i; printf("[ "); for(i = 0; i < m; i ++) printf("%d ", a[i]); printf("]\n"); }

int main( int argc, char **argv ) { int dta[M]; MPI_Status status; MPI_Init( &argc, &argv ); MPI_Comm_size( MPI_COMM_WORLD, &size ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); if( size != 2 ) { if( rank == 0 ) { printf("Error: 2 processes required\n"); fflush(stdout); } MPI_Abort(MPI_COMM_WORLD, MPI_ERR_OTHER ); } if( rank == 0 ){ initArray(dta, M, VAL); MPI_Send(dta, M, MPI_INT, 1, ID, MPI_COMM_WORLD ); printArray(dta, M); fflush(stdout); } else { MPI_Recv(dta, M, MPI_INT, 0, ID, MPI_COMM_WORLD, &status ); printArray(dta, M); fflush(stdout); } MPI_Finalize(); return 0; }

Функции обменов точка- точка int MPI_Send( buf, count, datatype, dest, tag, comm ) void *buf; /* in */ int count, dest, tag; /* in */ MPI_Datatype datatype; /* in */ MPI_Comm comm; /* in */ buf - адрес начала буфера посылаемых данных count - число пересылаемых объектов типа, соответствующего datatype dest - номер процесса-приемника tag - уникальный тэг, идентифицирующий сообщение datatype - MPI-тип принимаемых данных comm - коммуникатор

int MPI_Recv( buf, count, datatype, source, tag, comm, status ) void *buf; /* in */ int count, source, tag; /* in */ MPI_Datatype datatype; /* in */ MPI_Comm comm; /* in */ MPI_Status *status; /* out */ buf - адрес буфера для приема сообщения count - максимальное число объектов типа datatype, которое может быть записано в буфер source - номер процесса, от которого ожидается сообщение tag - уникальный тэг, идентифицирующий сообщение datatype - MPI-тип принимаемых данных comm - коммуникатор status - статус завершения

typedef struct { int count; int MPI_SOURCE; int MPI_TAG; int MPI_ERROR; } MPI_Status; count - число полученных элементов MPI_SOURCE - ранг процесса-передатчика данных MPI_TAG - тэг сообщения MPI_ERROR - код ошибки