
- •Основные архитектуры параллельных компьютеров
- •Классификация архитектур вычислительных систем. (Классификация Флинна)
- •Модели параллельного программирования. Основные свойства параллельных алгоритмов
- •Модель задача-канал. Основные свойства модели "задача/канал"
- •Модель передачи сообщений
- •Модель параллелизма данных
- •Модель разделяемой памяти
- •Понятие о детерминизме программы
- •Модульность. Виды композиции модулей и/или программ
- •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. Переменные среды исполнения.
26. Библиотека mpi. Глобальные вычислительные операции над распределенными данными
Идея проста: в каждой задаче имеется массив. Над нулевыми ячейками всех массивов производится некоторая операция (сложение/произведение/поиск минимума/максимума и т.д.), над первыми ячейками производится такая же операция и т.д. Четыре функции предназначены для вызова этих операций и отличаются способом размещения результата в задачах.
int MPI_Allreduce(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm).
sendbuf - адрес начала буфера для аргументов;
recvbuf - адрес начала буфера для результата (выходной параметр);
count - число аргументов у каждого процесса;
datatype — тип аргументов;
op - идентификатор глобальной операции;
comm - идентификатор группы.
Выполнение count глобальных операций op с возвратом count результатов во всех процессах в буфере recvbuf. Операция выполняется независимо над соответствующими аргументами всех процессов. Значения параметров count и datatype у всех процессов должны быть одинаковыми. Из соображений эффективности реализации предполагается, что операция op обладает свойствами ассоциативности и коммутативности.
int MPI_Reduce(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm).
root - процесс-получатель результата.
Функция аналогична предыдущей, но результат будет записан в буфер recvbuf только у процесса root.
int MPI_Reduce_scatter(void* sendbuf, void* recvbuf, int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm).
MPI_Reduce_scatter : каждая задача получает не весь массив-результат, а его часть. Длины этих частей находятся в массиве-третьем параметре функции. Размер исходных массивов во всех задачах одинаков, и равен сумме длин результирующих массивов.
int MPI_Scan(void* sendbuf, void* recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm).
MPI_Scan : аналогична функции MPI_Allreduce в том отношении, что каждая задача получает результирующий массив. Главное отличие: здесь содержимое массива- результата в задаче i является результатом выполнение операции над массивами из задач с номерами от 0 до i включительно.
27. Библиотека mpi. Обеспечение модульности. Коммуникаторы, группы и области связи
Два взаимосвязанных механизма:
функции для работы с группами процессов как упорядоченными множествами;
функции для работы с коммуникаторами, для создания новых коммуникаторов, как описателей новых областей связи.
Основные понятия (группа):
Группа – упорядоченное множество процессов;
Каждый процесс идентифицируется переменной целого типа (непрерывный ряд, начинающийся с 0);
Специальный тип данных MPI_Group;
Набор функций для работы с переменными и константами типа MPI_Group;
Две предопределенные группы:
MPI_GROUP_EMPTY
MPI_GROUP_NULL
Нет группы, соответствующей коммуникатору MPI_COMM_WORLD;
Созданная группа не может быть модифицирована (расширена или усечена);
Можно только создать новую группу;
Основные понятия (коммуникатор):
Коммуникатор – скрытый объект с некоторым набором атрибутов, правилами его создания, использования и уничтожения;
Коммуникатор описывает некоторую область связи;
Два предопределенных коммуникатора:
– MPI_COMM_WORLD
– MPI_COMM_SELF
Одной и той же области связи может соответствовать несколько коммуникаторов, но они не являются тождественными и не могут участвовать во взаимном обмене сообщениями.
Если данные посылаются через один коммуникатор, процесс-получатель может получить их только через тот же самый коммуникатор.
Область связи (communication domain) – это нечто абстрактное. В распоряжении программиста нет типа данных, описывающего непосредственно области связи, как нет и функций по управлению ими. Области связи автоматически создаются и уничтожаются вместе с коммуникаторами. Абонентами одной области связи являются все задачи либо одной, либо двух групп.
Типичное использование:
MPI_Comm_group: Получаем описатель глобальной группы, содержащей все процессы из MPI_COMM_WORLD;
MPI_Group_incl: Формируем новую группу как подмножество глобальной группы;
MPI_Comm_create: Создаем новый коммуникатор для новой группы;
MPI_Comm_rank: Получаем новый номер rank процесса в новом коммуникаторе;
Выполняем передачу данных;
MPI_Comm_free и MPI_Group_free: Освобождаем описатели нового коммуникатора и новой группы;
Определение числа процессов в группе: MPI_Group_size(MPI_Group group, int *size),
Определение номера процесса в группе: MPI_Group_rank(MPI_Group group, int *rank).
Установка соответствия между номерами процессов в двух группах: MPI_Group_translate_ranks(MPI_Group group1, int n, int *ranks1, MPI_Group group2, int *ranks2).
ranks1 – массив номеров процессов из 1-й группы; ranks2 – номера тех же процессов во 2-ой группе.