магПП2013 / lec13ПП
.pptx
11




Вспомогательные функции
•Протяженность и размер типа (сколько байтов нужно отводить для элемента и
сколько занимает):
int MPI_Type_extent( MPI_Datatype type, MPI_Aint *extent );
int MPI_Type_size( MPI_Datatype type,
MPI_Aint *size );
(П: размер=20, протяженность=28)
•Получение адреса переменной
int MPI_Address( void *location, MPI_Aint *address );
Лекция 13. И.Г. Захарова, кафедра ПО
12
Конструирование производных
типов
•Непрерывный способ
позволяет определить непрерывный набор элементов существующего типа как новый
производный тип
•Векторный способ
обеспечивает создание нового производного типа как набора элементов существующего
типа, между элементами которого существуют
регулярные промежутки по памяти.
Размер промежутков задается в числе элементов исходного типа
Лекция 13. И.Г. Захарова, кафедра ПО
13
Конструирование производных типов
•Индексный способ отличается от векторного способа тем, что
промежутки между элементами исходного типа могут иметь нерегулярный характер
•Структурный способ
обеспечивает самое общее описание
производного типа через явное указание карты создаваемого типа данных.
Лекция 13. И.Г. Захарова, кафедра ПО
14




Порядок работы
•Производный тип строится из
▫базовых типов MPI и
▫ранее определенных производных типов с помощью специальных функций- конструкторов :
MPI_Type_contiguous,
MPI_Type_vector, MPI_Type_hvector,
MPI_Type_indexed, MPI_Type_hindexed,
MPI_Type_struct.
Лекция 13. И.Г. Захарова, кафедра ПО
15




Порядок работы
•Новый производный тип регистрируется вызовом функции
MPI_Type_commit
•Только после регистрации новый производный тип можно использовать в коммуникационных операциях и при конструировании других типов.
•Предопределенные типы MPI считаются зарегистрированными.
•Когда производный тип становится ненужным, он уничтожается функцией
MPI_Type_free
Лекция 13. И.Г. Захарова, кафедра ПО
16




Функция для векторного способа
•Функция-конструктор типа
MPI_Type_vector создает тип, элемент которого представляет собой несколько равноудаленных друг от друга блоков из одинакового числа смежных элементов базового типа.
int MPI_Type_vector(int count, int blocklength, int stride,
MPI_Datatype oldtype, MPI_Datatype *newtype)
Лекция 13. И.Г. Захарова, кафедра ПО
17




Параметры функции count - число блоков;
blocklength - число элементов базового типа в каждом блоке;
stride - шаг между началами соседних блоков, измеренный числом элементов базового типа;
oldtype newtype
-базовый тип данных;
-новый производный тип данных.
Лекция 13. И.Г. Захарова, кафедра ПО
18




Пример
шаг между началами соседних блоков в
байтах Лекция 13. И.Г. Захарова, кафедра ПО
