- •Основные архитектуры параллельных компьютеров
- •Классификация архитектур вычислительных систем. (Классификация Флинна)
- •Модели параллельного программирования. Основные свойства параллельных алгоритмов
- •Модель задача-канал. Основные свойства модели "задача/канал"
- •Модель передачи сообщений
- •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. Переменные среды исполнения.
29. Библиотека mpi. Производные типы данных и передача упакованных данных
Механизмы эффективной пересылки данные разных типов:
создание производных типов для использования в коммуникационных операциях вместо предопределенных типов MPI;
пересылка упакованных данных (процесс-отправитель упаковывает пересылаемые данные перед их отправкой, а процесс-получатель распаковывает их после получения);
Производные типы данных:
Производный тип строится из предопределенных типов MPI и ранее определенных производных типов с помощью специальных функций-конструкторов MPI_Type_contiguous, MPI_Type_vector, MPI_Type_hvector, MPI_Type_indexed, MPI_Type_hindexed, MPI_Type_struct;
регистрируются вызовом функции MPI_Type_commit;
ненужные типы уничтожаются функцией MPI_Type_free;
Предопределенные типы MPI считаются зарегистрированными.
Характеристики типов:
Протяженность типа – сколько байт переменная данного типа занимает в памяти (адрес последней ячейки данных - адрес первой ячейки данных + длина последней ячейки данных);
int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent);
размер типа определяет количество реально передаваемых байт в коммуникационных операциях;
Эта величина равна сумме длин всех базовых элементов определяемого типа опрашивается подпрограммой
int MPI_Type_size(MPI_Datatype datatype, int *size);
int MPI_Type_commit(MPI_Datatype *datatype);
int MPI_Type_free(MPI_Datatype *datatype);
Функция MPI_Type_free устанавливает описатель типа в состояние MPI_DATATYPE_NULL.
Передача упакованных данных:
int MPI_Pack(void* inbuf, int incount, MPI_Datatype datatype, void *outbuf, int outsize, int *position, MPI_Comm comm);
int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size);
int MPI_Unpack(void* inbuf, int insize, int *position, void *outbuf, int outcount, MPI_Datatype datatype, MPI_Comm comm).
/* Упаковка данных */
if (myrank == 0) {position = 0;
MPI_Pack(&x, 1, MPI_DOUBLE, buff, 100, &position, MPI_COMM_WORLD);
MPI_Pack(&y, 1, MPI_DOUBLE, buff, 100, &position, MPI_COMM_WORLD);
MPI_Pack(a, 2, MPI_INT, buff, 100, &position, MPI_COMM_WORLD);
}
/* Рассылка упакованного сообщения */
MPI_Bcast(buff, position, MPI_PACKED, 0, MPI_COMM_WORLD);
/* Распаковка сообщения во всех процессах */
if (myrank != 0) {position = 0;
MPI_Unpack(buff, 100, &position, &x, 1, MPI_DOUBLE, MPI_COMM_WORLD);
MPI_Unpack(buff, 100, &position, &y, 1, MPI_DOUBLE, MPI_COMM_WORLD);
MPI_Unpack(buff, 100, &position, a, 2, MPI_INT, MPI_COMM_WORLD);}
Технология OpenMp. Стратегия подхода.
OpenMP - это интерфейс прикладного программирования для создания многопоточных приложений, предназначенных в основном для параллельных вычислительных систем с общей памятью. Разработчики стандарта ARB (Architecture Board).
Основания для достижения эффекта – разделяемые для параллельных процессов данные располагаются в общей памяти, и для организации взаимодействия не требуется операций передачи сообщений.
Интерфейс OpenMP служит основой для формирования новой технологии параллельного программирования для систем с общей памятью (shared-memory programming).
Положительные стороны:
Поэтапное (инкрементальное) распараллеливание
Можно распараллеливать программы поэтапно, не меняя их структуру
Единственность разрабатываемого кода
Нет необходимости поддерживать последовательный и параллельный вариант программы, т.к. директивы игнорируются обычным компилятором
Эффективность
Учет и использование возможностей систем с общей памятью
Стандартизованность (переносимость), поддержка в наиболее
распространенных языках (C, Fortran) и платформах (Windows, Unix)
Принцип организации параллелизма:
Использование потоков (общее адресное пространство)
Пульсирующий («вилочный», fork-join) параллелизм
При выполнении обычного кода (вне параллельных областей) программа выполняется одним потоком (master thread)
При выполнении директивы #parallel происходит создание «команды» (team) потоков для параллельного выполнения вычислений
После выхода из области действия директивы #parallel происходит синхронизация, все потоки, кроме master, уничтожаются
Продолжается последовательное выполнение кода (до следующей директивы #parallel)
Структура:
Набор директив компилятора
Библиотека функций
Набор переменных окружения
