Кафедра ЮНЕСКО по НИТ1 Производные типы данных Параллельное программирование.

Презентация:



Advertisements
Похожие презентации
Кафедра ЮНЕСКО по НИТ1 Передача упакованных данных Параллельное программирование.
Advertisements

Введение в параллельные вычисления. Технология программирования MPI (день седьмой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Кафедра ЮНЕСКО по НИТ1 Коллективные коммуникационные операции параллельное программирование.
Кафедра ЮНЕСКО по НИТ1 Создание групп и коммуникаторов Параллельное программирование.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 8 Методы разработки параллельных программ при использования интерфейса передачи.
Кафедра ЮНЕСКО по НИТ1 Коллективные коммуникационные операции. Редукционные операции параллельное программирование Часть2.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 4 Работа с бинарными файлами (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков.
Кафедра ЮНЕСКО по НИТ1 Эффективность и ускорение параллельных программ параллельное программирование.
КОЛЛЕКТИВНЫЕ ВЗАИМОДЕЙСТВИЯ ПРОЦЕССОВ Барьерная синхронизация всех процессов группы. Широковещательная передача (broadcast) от одного процесса всем остальным.
Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 8 Томский политехнический университет.
Кафедра ЮНЕСКО по НИТ1 Коммуникационные операции «точка-точка» параллельное программирование.
Информационные технологии Классы памяти auto static extern register Автоматические переменные создаются при входе в функцию и уничтожаются при.
Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 7 Томский политехнический университет.
ЗАПИСЬ ВСПОМОГАТЕЛЬНЫХ АЛГОРИТМОВ НА ЯЗЫКЕ Паскаль НАЧАЛА ПРОГРАММИРОВАНИЯ.
Программирование на Basic МассивыПрограммирование на Basic Массивы.
Дни недели Температура (С 0 ) 1. Сколько дней температура была выше 16 0 ? 2. Какого.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Автор: учитель информатики МКОУ Плесской средней общеобразовательной школы Юдин Андрей Борисович Часть 1.
Введение в параллельные вычисления. Технология программирования MPI (день пятый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Введение в параллельные вычисления. Технология программирования MPI (день второй) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Транксрипт:

Кафедра ЮНЕСКО по НИТ1 Производные типы данных Параллельное программирование

Кафедра ЮНЕСКО по НИТ 2 Ограничение стандартных типов Коммуникационные операции позволяют посылать и получать последовательность элементов одного типа, занимающих смежные области памяти. При разработке параллельных программ иногда возникает потребность передавать данные разных типов (структуры) или данные, расположенные в несмежных областях памяти (части массивов, не образующих непрерывную последовательность элементов) В MPI предоставляются два механизма эффективной пересылки данных: создание производных типов; пересылка упакованных данных.

Кафедра ЮНЕСКО по НИТ 3 Производные типы данных Производные типы данных MPI не являются в полном смысле типами данных Они не могут использоваться ни в каких других операциях, кроме коммуникационных Производный тип MPI представляет собой скрытый объект, который специфицирует две вещи: последовательность базовых типов последовательность смещений

Кафедра ЮНЕСКО по НИТ 4 Сценарий определения и использования производных типов 1. Производный тип строится из предопределенных типов MPI и ранее определенных типов с помощью специальных функций- конструкторов: MPI_Type_contiguous, MPI_Type_vector, MPI_Type_hvector, MPI_Type_indexed, MPI_Type_hindexed, MPI_Type_struct. 1. Новый производный тип регистрируется вызовом функции MPI_Type_commit. Только после регистрации новый тип можно использовать. 2. Когда производный тип становится ненужным, он уничтожается функцией MPI_Type_free.

Кафедра ЮНЕСКО по НИТ 5 Характеристика любого типа данных в MPI протяженность Протяженность типа определяет, сколько байт переменная данного типа занимает в памяти. Эта величина может быть вычислена как: адрес последней ячейки данных – адрес первой ячейки данных + длина последней ячейки данных. размер Размер типа определяет количество реально передаваемых байт. Эта величина равна сумме длин всех базовых элементов определяемого типа.

Кафедра ЮНЕСКО по НИТ 6 Функция MPI_Type_extent определяет протяженность элемента некоторого типа datatype тип данных int MPI_Type_extent (MPI_Datatype datatype, MPI_Aint *extent) Входные параметры: Выходные параметры: extent протяженность элемента заданного типа

Кафедра ЮНЕСКО по НИТ 7 Функция MPI_Type_size определяет «чистый» размер элемента некоторого типа datatype тип данных int MPI_Type_size (MPI_Datatype datatype, int *size) Входные параметры: Выходные параметры: size размер элемента заданного типа

Кафедра ЮНЕСКО по НИТ 8 Самый простой конструктор типов MPI_Type_contiguous count число элементов базового типа oldtype базовый тип данных int MPI_Type_contiguous (int count, MPI_Datatype oldtype, MPI_Datatype *newtype) Входные параметры: Выходные параметры: newtype новый производный тип данных Создает новый тип, элементы которого состоят из указанного числа элементов базового типа, занимающих смежные области памяти.

Кафедра ЮНЕСКО по НИТ 9 Функция MPI_Type_commit регистрирует созданный производный тип datatype тип данных int MPI_Type_commit (MPI_Datatype *datatype) Входные параметры: Выходные параметры: datatype тип данных Только после регистрации новый тип можно использовать в коммуникационных операциях.

Кафедра ЮНЕСКО по НИТ 10 Функция MPI_Type_free уничтожает описатель производного типа datatype тип данных int MPI_Type_free (MPI_Datatype *datatype) Входные параметры: Выходные параметры: datatype тип данных Созданный производный тип данных обязательно должен быть уничтожен до конца работы параллельной программы

Кафедра ЮНЕСКО по НИТ 11 Функция MPI_Get_elements возвращает число элементов простого типа (базового типа), содержащихся в сообщении status статус сообщения datatype тип элементов сообщения int MPI_Get_elements (MPI_Status *status, MPI_Datatype datatype, int *count) Входные параметры: Выходные параметры: count число элементов простого (базового) типа, содержащихся в сообщении

Кафедра ЮНЕСКО по НИТ 12 Задание 1 На нулевом процессоре задать массив из 10 элементов. Создать новый тип данных и передать исходный массив на первый процессор как один элемент.

Кафедра ЮНЕСКО по НИТ 13 Конструктор типов MPI_Type_vector count число блоков blocklength число элементов базового типа в каждом блоке stride шаг между началами соседних блоков, измеренный числом элементов базового типа oldtype базовый тип данных int MPI_Type_vector (int count, int blocklength, int stride, MPI_Datatype oldtype, MPI_Datatype *newtype) Входные параметры: Выходные параметры: newtype новый производный тип данных Создает новый тип, элементы которого представляют собой несколько равноудаленных друг от друга блоков из одинакового числа смежных элементов базового типа.

Кафедра ЮНЕСКО по НИТ 14 Конструктор типов MPI_Type_vector

Кафедра ЮНЕСКО по НИТ 15 Конструктор типов MPI_Type_hvector count число блоков blocklength число элементов базового типа в каждом блоке stride шаг между началами соседних блоков в байтах oldtype базовый тип данных int MPI_Type_hvector (int count, int blocklength, MPI_Aint stride, MPI_Datatype oldtype, MPI_Datatype *newtype) Входные параметры: Выходные параметры: newtype новый производный тип данных Конструктор типа MPI_Type_hvector расширяет возможности конструктора MPI_Type_vector, позволяя задавать произвольный шаг между началами блоков в байтах.

Кафедра ЮНЕСКО по НИТ 16 Конструктор типов MPI_Type_hvector

Кафедра ЮНЕСКО по НИТ 17 Конструктор типов MPI_Type_indexed count число блоков array_of_b.. массив, содержащий число элементов базового типа в каждом блоке array_of_di. массив смещений каждого блока от начала размещения элемента нового типа (элемент) oldtype базовый тип данных int MPI_Type_indexed (int count, int *array_of_blocklength, int *array_of_displacements, MPI_Datatype oldtype, MPI_Datatype *newtype) Входные параметры: Выходные параметры: newtype новый производный тип данных Создает новый тип, элементы которого состоят из произвольных по длине блоков с произвольным смещением блоков от начала размещения элемента.

Кафедра ЮНЕСКО по НИТ 18 Конструктор типов MPI_Type_indexed

Кафедра ЮНЕСКО по НИТ 19 Конструктор типов MPI_Type_hindexed count число блоков array_of_b.. массив, содержащий число элементов базового типа в каждом блоке array_of_di. массив смещений каждого блока от начала размещения элемента нового типа (в байтах) oldtype базовый тип данных int MPI_Type_hindexed (int count, int *array_of_blocklength, MPI_Aint *array_of_displacements, MPI_Datatype oldtype, MPI_Datatype *newtype) Входные параметры: Выходные параметры: newtype новый производный тип данных Создает новый тип, элементы которого состоят из произвольных по длине блоков с произвольным смещением блоков от начала размещения элемента.

Кафедра ЮНЕСКО по НИТ 20 Конструктор типов MPI_Type_hindexed

Кафедра ЮНЕСКО по НИТ 21 Конструктор типов MPI_Type_struct count число блоков array_of_b.. массив, содержащий число элементов базового типа в каждом блоке array_of_di. массив смещений каждого блока от начала размещения элемента нового типа в байтах array_of_ty. массив, содержащий тип элементов в каждом блоке int MPI_Type_struct (int count, int *array_of_blocklength, MPI_Aint *array_of_displacements, MPI_Datatype *array_of_types, MPI_Datatype *newtype) Входные параметры: Выходные параметры: newtype новый производный тип данных

Кафедра ЮНЕСКО по НИТ 22 Конструктор типов MPI_Type_struct

Кафедра ЮНЕСКО по НИТ 23 Задание rank = 0rank = 1 send