Подождите, пожалуйста, выполняется поиск в заданном разделе

Cистемы с распределенной памятью на примере MPI

Для системс распределенной памятью широкоприменяется  интерфейс MPI—Message Passing Interface.

Используютсяи  другие:PMV(Parallel Virtual Machine) или SHMEM.

MPI основан на механизме передачии приёмки сообщений.

MPI является распространенной средой для создания и выполнения параллельных программ.

Message Passing

Метод передачи данных из памяти одногопроцессора в память другого

Данные пересылаются в виде пакетов

Сообщение может состоять из одного илинескольких пакетов

Пакеты обычно содержат информацию роутингаи управления

 Cистемы с распределенной памятью на примере MPI - портал intellect.icu

Process:

Набор исполняемых команд (программа)

На процессоре может выполняться один или несколько процессов

Процессы обмениваются информацией только с помощью сообщений

Для повышения производительности желательно каждый процесс запускать на отдельном процессоре

На многоядерной ПЭВМ процессы могут выполняться на отдельных ядрах

 

Message PassingLibrary

Коллекция функций, используемых программой

Предназначены для передачи, приема и обработки сообщений

Среда выполнения параллельных программ

Cистемы с распределенной памятью на примере MPI - портал intellect.icu

Send / Receive

При передаче данных требуется взаимодействие двух процессоров -передатчика и приемника

Передатчик определяет положение данных, размер, тип, получателя

Приемник должен соответствовать передаваемым данным

Cистемы с распределенной памятью на примере MPI - портал intellect.icu

Synchronous/ Asynchronous

Синхронная передача завершается только послеподтверждения приемника о получениисообщения.

Асинхронная передача выполняется безквитирования (менее надежно)

ApplicationBuffer

Адресное пространство, содержащее данные, подлежащие передаче или приему (например,область памяти данных, хранящая некоторуюпеременную)

SystemBuffer

Системная область памяти для хранения сообщений

В зависимости от типа сообщения данные из ApplicationBufferмогут копироваться в SystemBufferи наоборот

BlockingCommunication

Функция завершается только после некоторого события

Non-blockingCommunication

Функция завершается без ожидания каких-либо коммуникационных событий

Использование системного буфера после выполнения неблокирующей операции передачи ОПАСНО!

CommunicatorsandGroups

Специальные объекты, определяющие, какие процессы могут обмениваться данными.

Процесс может входить в группу

Группа обменивается данными с помощью коммуникатора

В пределах группы процесс получает уникальный номер (идентификаторы)

Процесс может входить в несколько групп (разные идентификаторы!)

Сообщения, отправленные в разных коммуникаторах, не мешают друг другу

Поддерживает 2 стиля программирования:

MIMD -MultipleInstructionsMultipleData

•Процессы выполняют разный программный код

•Очень сложно писать и отлаживать

•Сложно синхронизировать и управлять взаимодействием процессов

SPMD -SingleProgramMultipleData

•Самый распространенный вариант

•Все процессы выполняют одинаковый программный код

 Cистемы с распределенной памятью на примере MPI - портал intellect.icu

 Cистемы с распределенной памятью на примере MPI - портал intellect.icu

MPI представляет собой как набор библиотек, так и среду выполнения

Компиляция и компоновка с помощью скрипта mpicc

mpiccMPI_Hello.c-o MPI_Hello

Запуск программы на исполнение с использованием 5 процессов

mpiexec-n 5 MPI_Helloс

Добавление адресов узлов делается параметрами “-hosts”, “-nodes”, “-hostfile”:

mpiexec–hosts 10.2.12.5 10.2.12.6

 

Набор функций MPIдля обмена данными между группами процессов

Особенности:

в режиме приема-передачи работают все процессы

коллективная функция работает одновременно и на прием, и на передачу

значения всех параметров во всех процессах (кроме адреса буфера) должны совпадать

Включают:

MPI_Bcast()–широковещательная рассылка сообщения

MPI_SCATTER() –раздача данных разным процессам

MPI_Gather()–сбор данных из всех процессов в один процесс

MPI_Allgather()–сбор данных из всех процессов во все процессы

intMPI_Barrier()–точка синхронизации

MPI_Bcast(*buffer,count,datatype,root,comm)

buffer -буфер данных

count -счетчик передаваемых данных

datatype -тип данных

root -процесс-источник данных

comm-коммуникатор

MPI_Barrier(comm)

Приостанавливает процесс до момента, когда всепроцессы группы не достигнут барьера (точкисинхронизации)

Процессы ждут друг друга.

 Cистемы с распределенной памятью на примере MPI - портал intellect.icu

                      

 

                         MPI_Scatter(*sendbuf,sendcnt,sendtype,*recvbuf,recvcnt,recvtype,root,comm)

Передает данные из массива процесса источника в накопители всех процессов

sendbuf-буфер источник с массивом рассылаемых данных

sendcnt-счетчик передаваемых данных

sendtype-тип данных

recvbuf-приемный буфер

recvcnt-счетчик принятых данных

recvtype-тип принятых данных

root -номер процесса, рассылающего данные

comm-коммуникатор

MPI_Gather(*sendbuf,sendcnt,sendtype,*recvbuf,recvcnt,recvtype,root,comm)

Собирает данные из буферов всех процессов вмассив-накопитель процесса-сборщика

sendbuf-буфер источник рассылаемых данных

sendcnt-счетчик передаваемых данных

sendtype-тип данных

recvbuf-приемный буфер для сбора данных

recvcnt-счетчик принятых данных

recvtype-тип принятых данных

root -номер собирающего процесса

comm-коммуникатор

 

набор функций MPI для обмена даннымимежду отдельными процессами

одна ветвь вызывает функцию передачиданных, а другая -функцию приема

 Cистемы с распределенной памятью на примере MPI - портал intellect.icu

Суть:

Задача 1 передает:

intbuf[10];

MPI_Send(buf, 5, MPI_INT, 1, 0, MPI_COMM_WORLD);

Задача 2 принимает:

intbuf[10];

MPI_Statusstatus;

MPI_Recv(buf, 10, MPI_INT, 0, 0,

MPI_COMM_WORLD, &status);

 

 Cистемы с распределенной памятью на примере MPI - портал intellect.icu

 

 Cистемы с распределенной памятью на примере MPI - портал intellect.icu

 

 

 Cистемы с распределенной памятью на примере MPI - портал intellect.icu

 

Создадим приложение из N процессов

Создадим и заполним данными большой массив в процессе 0

Передадим часть массива в каждый процесс

В каждом процессе выполним сортировку локального массива в порядке возрастания

В процессе 0 копируем локальный массив в выходной массив

В процессе 0 по очереди принимаем локальные массивы от других процессов и сливаем с выходным массивом

Вспомогательные функции:

•Создание буфера и заполнение числами

•Сортировка по возрастанию указанного буфера

•Печать элементов буфера в окне терминала

•Слияние двух упорядоченных массивов по возрастанию

Прототипы функций

double *generate1(int);

double *processIt1(double *, int);

voidshowIt1(double *, int);

double *merge(double *arr1, double *arr2, intl1, intl2);

 

 Cистемы с распределенной памятью на примере MPI - портал intellect.icu

Cистемы с распределенной памятью на примере MPI - портал intellect.icu

Cистемы с распределенной памятью на примере MPI - портал intellect.icu

Cистемы с распределенной памятью на примере MPI - портал intellect.icu

 

        

 

подробнее на сайте https://intellect.icu/cistemy-s-raspredelennoj-pamyatyu-na-primere-mpi-5594

Комментарии (0)


avatar

Чтобы оставить комментарий войдите или зарегистрируйтесь



Высоконагруженные проекты.Теория паралельные вычисления. Суперкомпьютеры. Распределенные системы