
- •Основные архитектуры параллельных компьютеров
- •Классификация архитектур вычислительных систем. (Классификация Флинна)
- •Модели параллельного программирования. Основные свойства параллельных алгоритмов
- •Модель задача-канал. Основные свойства модели "задача/канал"
- •Модель передачи сообщений
- •Модель параллелизма данных
- •Модель разделяемой памяти
- •Понятие о детерминизме программы
- •Модульность. Виды композиции модулей и/или программ
- •10. Пример параллельного алгоритма: конечные разности.
- •11. Основные этапы разработки параллельной программы.
- •12. Декомпозиция. Цели. Виды декомпозиции. Итоги этапа декомпозиции.
- •Д екомпозиция по данным
- •Ф ункциональная декомпозиция
- •13. Коммуникация. Виды коммуникаций: локальные, глобальные,динамические, асинхронные. Распределенные коммуникации ивычисления. Итоги.
- •Локальные/глобальные.
- •Синхронные/асинхронные.
- •Статические/динамические.
- •С труктурные/неструктурные.
- •16. Анализ эффективности параллельных алгоритмов. Система показателей оценки характеристик параллельной программы. Асимптотический анализ. Эффективность параллельной программы
- •Система показателей оценки характеристик
- •Соглашения о терминах
- •Принятая в mpi нотация записи
- •23. Базовые функции mpi (минимальный набор)
- •24. Библиотека mpi. Организация приема/передачи данных между отдельными процессами
- •Функции приема/передачи сообщений с блокировкой
- •Основные функции приема/передачи сообщений без блокировки
- •Совмещенные прием/передача сообщений
- •25. Библиотека mpi. Коллективные функции
- •Функции коллективного обмена данными
- •26. Библиотека mpi. Глобальные вычислительные операции над распределенными данными
- •27. Библиотека mpi. Обеспечение модульности. Коммуникаторы, группы и области связи
- •Два взаимосвязанных механизма:
- •Основные понятия (группа):
- •Основные понятия (коммуникатор):
- •28. Библиотека mpi. Проблемы использования различных типов данных. Пользовательские типы данных
- •Пользовательские типы данных:
- •Характеристики типов:
- •29. Библиотека mpi. Производные типы данных и передача упакованных данных
- •Механизмы эффективной пересылки данные разных типов:
- •Производные типы данных:
- •Характеристики типов:
- •Передача упакованных данных:
- •Технология OpenMp. Стратегия подхода.
- •Директивы OpenMp. Формат записи директив.
- •Директивы OpenMp. Области видимости директив. Типы директив.
- •Директивы OpenMp. Определение параллельной области.
- •Директивы OpenMp. Распределение вычислений по потокам.
- •Директивы OpenMp. Синхронизация.
- •Директивы OpenMp. Управление областью видимости данных.
- •37. Библиотека функций OpenMp. Функции контроля параметров среды исполнения.
- •38. Библиотека функций OpenMp. Функции синхронизации.
- •39. Технология OpenMp. Переменные среды исполнения.
Функции коллективного обмена данными
Широковещательная рассылка данных:
int MPI_Bcast( void *buffer, int count, MPI_Datatype datatype, int source, MPI_Comm comm);
buffer - адрес начала буфера посылки сообщения (выходной параметр);
count - число передаваемых элементов в сообщении;
datatype - тип передаваемых элементов;
root - номер рассылающего процесса;
comm - идентификатор группы.
Выполняется рассылка сообщения от процесса root всем процессам, включая рассылающий процесс. При возврате из процедуры содержимое буфера buffer процесса root будет скопировано в локальный буфер процесса. Значения параметров count, datatype и root должны быть одинаковыми у всех процессов.
Функции сбора блоков данных от всех процессов группы:
int MPI_Gather(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm).
sendbuf - адрес начала буфера посылки;
sendcount - число элементов в посылаемом сообщении;
sendtype - тип элементов отсылаемого сообщения;
recvbuf - адрес начала буфера сборки данных (выходной параметр);
recvcount - число элементов в принимаемом сообщении;
recvtype - тип элементов принимаемого сообщения;
root - номер процесса, на котором происходит сборка данных;
comm - идентификатор группы;
ierror - код ошибки (выходной параметр).
Данная функция ("совок") выполняет сборку данных со всех процессов в буфере recvbuf процесса root. Каждый процесс, включая root, посылает содержимое своего буфера sendbuf процессу root. Собирающий процесс сохраняет данные в буфере recvbuf, располагая их в порядке возрастания номеров процессов. Параметр recvbuf имеет значение только на собирающем процессе и на остальных игнорируется, значения параметров sendcount, datatype и root должны быть одинаковыми у всех процессов. Векторный вариант функции сбора данных – MPI_Gatherv – позволяет задавать разное количество отправляемых данных в разных задачах-отправителях. Соответственно, на приемной стороне задается массив позиций в приемном буфере, по которым следует размещать поступающие данные, и максимальные длины порций данных от всех задач. Оба массива содержат позиции/длины не в байтах, а в количестве ячеек типа recvcount.
int MPI_Allgather(void* sendbuf, intsendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm);
int MPI_Gatherv(void* sendbuf, int sendcount, MPI_Datatype sendtype, void*rbuf, int *recvcounts, int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm).
Функция MPI_Allgather аналогична MPI_Gather, но прием осуществляется не в одной задаче, а во всех: каждая имеет специфическое содержимое в передающем буфере, и все получают одинаковое содержимое в буфере приемном. Как и в MPI_Gather, приемный буфер последовательно заполняется данными изо всех передающих. Вариант с неодинаковым количеством данных называется MPI_Allgatherv.
Функции распределения блоков данных по всем процессам группы:
int MPI_Scatter(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm).
Функция MPI_Scatter ("разбрызгиватель") выполняет обратную "совку" операцию - части передающего буфера из задачи root распределяются по приемным буферам всех задач.
int MPI_Scatterv(void* sendbuf, int *sendcounts, int *displs, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm).
Векторный вариант – MPI_Scatterv, рассылает части различной длины в приемные буфера разного размера.
Совмещенные коллективные операции:
int MPI_Alltoall(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm).
MPI_Alltoall : каждый процесс нарезает передающий буфер на куски и рассылает куски остальным процессам; каждый процесс получает куски от всех остальных и поочередно размещает их приемном буфере. Это "совок" и "разбрызгиватель" в одном флаконе. Векторный вариант называется MPI_Alltoallv.