
- •Основные архитектуры параллельных компьютеров
- •Классификация архитектур вычислительных систем. (Классификация Флинна)
- •Модели параллельного программирования. Основные свойства параллельных алгоритмов
- •Модель задача-канал. Основные свойства модели "задача/канал"
- •Модель передачи сообщений
- •Модель параллелизма данных
- •Модель разделяемой памяти
- •Понятие о детерминизме программы
- •Модульность. Виды композиции модулей и/или программ
- •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. Переменные среды исполнения.
28. Библиотека mpi. Проблемы использования различных типов данных. Пользовательские типы данных
Стандартные функции пересылки данных прекрасно обходятся без подобной информации – им требуется знать только размер в байтах. Вместо одного такого аргумента функции MPI получают два: количество элементов некоторого типа, и символический описатель указанного типа. Причин тому несколько:
1. MPI позволяет описывать пользовательские типы данных, которые располагаются в памяти не непрерывно, а с разрывами, или наоборот, с перехлестом. Переменная такого типа характеризуется не только размером, и эти характеристики MPI хранит в описателе типа.
2. Приложение MPI может работать на гетерогенном вычислительном комплексе (коллективе ЭВМ с разной архитектурой). Одни и те же типы данных на разных машинах могут иметь разное представление, например: на плавающую арифметику существует 3 разных стандарта (IEEE, IBM, Cray); тип char в терминальных приложениях Windows представлен альтернативной кодировкой ГОСТ, а в Unix - кодировкой KOI-8r; в многобайтовых числах на процессорах фирмы intel младший байт занимает младший адрес, на всех остальных – наоборот. Если приложение работает в гетерогенной сети, через сеть задачи обмениваются данными в формате XDR (eXternal Data Representation), принятом в Internet. Перед отправкой и после приема данных задача конвертирует их в/из XDR, при этом MPI должен знать количество передаваемых байт и тип содержимого.
3. Обязательным требованием к MPI была поддержка языка FORTRAN в силу его инерционной популярности. В этом языке тип CHARACTER требует особого обращения, поскольку переменная такого типа содержит не собственно текст, а адрес текста и его длину. Ошибка в указании типа приведет: при отправке – к копированию служебных данных вместо текста, при приеме – к записи текста на место служебных данных.
4. Такие часто используемые в С типы данных, как структуры, могут содержать в себе некоторое пустое пространство, чтобы все поля в переменной такого типа размещались по адресам, кратным некоторому четному числу (часто 2, 4 или 8) – это ускоряет обращение к ним. Причины тому чисто аппаратные. Выравнивание данных настраивается ключами компилятора. Разные задачи одного и того же приложения, выполняющиеся на одной и той же машине (даже на одном и том же процессоре), могут быть построены с разным выравниванием, и типы с одинаковым текстовым описанием будут иметь разное двоичное представление.
Пользовательские типы данных:
Производный тип строится из предопределенных типов 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.