Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 8 Методы разработки параллельных программ при использования интерфейса передачи.

Slides:



Advertisements
Similar presentations
MPI Basics Introduction to Parallel Programming and Cluster Computing University of Washington/Idaho State University MPI Basics Charlie Peck Earlham College.
Advertisements

Введение в параллельные вычисления. Технология программирования MPI (день шестой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Поиск оптимального набора параметров оптимизаций компилятора Брусенцов Леонид Евгеньевич студент 4 курса ФИТ НГУ Руководители:Илья.
Системы отбора. Условные обозначения (1) (2) (3) (4) (5) (6) (7) Математическое моделирование процессов отбора2.
Елена Станиславовна Петрова Учитель-логопед высшей категории ГДОУ детский сад №47 комбинированного вида Фрунзенского района г. Санкт-Петербурга 2011 год.
Автор : учитель математики МОУ « СОШ № 76» Виноградова Светлана Анатольевна.
Половинкин А.Н..  Вычисления общего назначения на GPU  Архитектура GPU  Программная модель выполнения на CUDA  Программирование с использованием CUDA.
Тел. (495) Москва, а/я 212 Рабочая группа по реформе МВД Москва, 2010 Новикова Асмик, Фонд «Общественный вердикт»
Некомпенсаторное агрегирование и рейтингование студентов Авторы: Гончаров Алексей Александрович, Чистяков Вячеслав Васильевич. НФ ГУ ВШЭ 2010 год.
Bank ownership and lending behavior Alejandro Micco, Ugo Panizza Politicians and banks: Political influences on government-owned banks in emerging markets.
Российский государственный педагогический университет им. А.И. Герцена ИНСТИТУТ ДОВУЗОВСКОЙ ПОДГОТОВКИ Дистанционное обучение «Русский язык. Подготовка.
Скриптовые языки на примере Perl. Языки программирования Скриптовые Программа (или ее бай-код) интерпретируется Зачастую более высокий уровень абстрагирования.
ООП Классы – 2. Ссылки Ссылка – еще одно имя объекта. Используйте ссылки вместо указателя. Это более безопасно. Complex c(10,10); Complex c2& = c; c2+=10;
Особенности Java. Блок static static { } Создание и уничтожение объектов  new – создание объекта  finalyze()
Язык JavaScript Скриптовый язык для выполнения на html-страницах.
1 Генерация контекстных ограничений для баз данных Выполнил: Жолудев В. Научный руководитель: Терехов А.Н. Рецензент: Иванов А.Н.
Введение в параллельные вычисления. Технология программирования MPI (день седьмой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Введение в параллельные вычисления. Технология программирования MPI (день третий) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Анатомия класса. Схожесть с др. языками   С# похож на язык Java в том, что он требует, чтобы вся программная логика была заключена в определения типов.
Основы цифровой обработки речевых сигналов. Общая схема процесса речеобразования x[n] – дискретные отсчеты сигнала возбуждения y[n] – дискретные отсчеты.
Growing Neural Gas Method Нейросетевой метод построения неструктурированных адаптивных сеток.
Сравнение различных методов хранения XML в реляционных базах данных и в разных системах. Нгуен Тхань Хуен- 545 группа Руководитель : Б.А. Новиков Рецензент:
 Нужно много различных протоколов связи  Каждый из них может реализовываться на разных платформах Современные сети Много устройств, компьютеров и сетей.
PHP как язык программирования. Типы данных логические величины int, integer – целые числа real, double, float – вещественные числа string – строки array.
Введение в параллельные вычисления. Технология программирования MPI (день второй) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 16 Методы разработки параллельных программ для многопроцессорных систем с общей.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 4 Методы разработки параллельных программ при использования интерфейса передачи.
"The European Molecular Biology Open Software Suite"
Формантный синтезатор речи. Часть 1. Полюсы и нули – иное понимание Полюс – это пара чисел (B, F), B – ширина форманты, F – частота форманты Нуль – это.
Лобанов Алексей Иванович Основы вычислительной математики Лекция 1 8 сентября 2009 года.
Распределение наборов неоднородных по размеру заданий в кластерных системах на основе ClassAd механизма Голубев Александр Юрьевич, 542 группа Научный руководитель:
Синтаксис языка Java.
Пользовательские действия (custom actions) в JSP. JSTL.
Особенности языка JavaScript и его использования.
Увеличение модульности программного обеспечения на языке Java Курсовая работа студента 345 группы Абишева Тимура Маратовича Научный руководитель: Профессор.
Санкт-Петербургский Государственный Университет Математико-Механический факультет Кафедра системного программирования Применение диаграмм двоичных решений.
Маршрут, цепь, цикл Маршрутом называют последовательность вершин и ребер, в которой любые два соседних элемента инцидентны (т.е. соединены). Например:
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Математико-механический факультет Кафедра системного программирования Автоматизация выбора оптимальной.
Формы в HTML. Элемент FORM Элемент уровня «блок» Управляющие элементы Просто текст Атрибуты: action – url обработчика method – post или get enctype –
Демидов А.В г. Операционные системы Лекция 4 Работа с файлами.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 15 Методы разработки параллельных программ для многопроцессорных систем с общей.
Its.unc.edu 1 Derived Datatypes Research Computing UNC - Chapel Hill Instructor: Mark Reed
Введение в параллельные вычисления. Технология программирования MPI (день пятый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
1 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В. Java 2 Micro Edition Лаборатория информационных технологий (ИТЛаб) При поддержке фирмы.
Message Passing Interface. Message Passing Interface (MPI) Message Passing Interface (MPI) is a specification designed for parallel applications. The.
ВВЕДЕНИЕ В ВЫЧИСЛИТЕЛЬНУЮ МАТЕМАТИКУ Лекция 5 6 октября 2009 ВЫЧИСЛИТЕЛЬНАЯ ЛИНЕЙНАЯ АЛГЕБРА.
XML - расширенный язык разметки Моисеевой О. Макушиной Д. (eXtensible Markup Language)
XML Схемы XML документов. XML Schema созданая Microsoft позволяет избавиться от DTD блоков. Основа – использование пространств имен и очень точная типизация.
Введение в параллельные вычисления. Технология программирования MPI (день четвертый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Обработка исключений в C# Единая техника обнаружения ошибок времени выполнения и передачи информации о них.
Edgar Gabriel MPI derived datatypes Edgar Gabriel.
Director of Contra Costa College High Performance Computing Center
1 Why Derived Data Types  Message data contains different data types  Can use several separate messages  performance may not be good  Message data.
Parallel Processing1 Parallel Processing (CS 676) Lecture: Grouping Data and Communicators in MPI Jeremy R. Johnson *Parts of this lecture was derived.
КРУПНЕЙШАЯ ТЕХНИЧЕСКАЯ КОНФЕРЕНЦИЯ MICROSOFT В УКРАИНЕ Metro приложения: работа с данными Краковецкий Александр, MVP/RD/PhD. DevRain Solutions.
Introduction to MPI CDP 1. Shared Memory vs. Message Passing Shared Memory Implicit communication via memory operations (load/store/lock) Global address.
MPI Workshop - III Research Staff Cartesian Topologies in MPI and Passing Structures in MPI Week 3 of 3.
Микропроцессорные системы Программирование INTEL 8086 Системная программа Debug.
Activity ANDROID CLUB Сегодня  Основные компоненты Android  Activity  Layout для Activity  Создание Activity  Launcher Activity  Activity.
Grouping Data and Derived Types in MPI. Grouping Data Messages are expensive in terms of performance Grouping data can improve the performance of your.
Introduction to MPI Programming Ganesh C.N.
Collectives Reduce Scatter Gather Many more.
MPI Jakub Yaghob.
Auburn University COMP7330/7336 Advanced Parallel and Distributed Computing Message Passing Interface (cont.) Topologies.
September 4, 1997 Parallel Processing (CS 676) Lecture 8: Grouping Data and Communicators in MPI Jeremy R. Johnson *Parts of this lecture was derived.
September 4, 1997 Parallel Processing (CS 730) Lecture 7: Grouping Data and Communicators in MPI Jeremy R. Johnson *Parts of this lecture was derived.
Точечные взаимодействия
CS 5334/4390 Spring 2017 Rogelio Long
MPI MPI = Message Passing Interface
Message Passing Programming Based on MPI
Presentation transcript:

Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 8 Методы разработки параллельных программ при использования интерфейса передачи сообщений MPI–2 Нижегородский Государственный Университет им. Н.И. Лобачевского

Параллельные Гергель В.П. ННГУ, Н.Новгород, Содержание Конструирование производных типов данных в MPI: постановка проблемы Базовые типы данных MPIБазовые типы данных MPI Понятие производного типа данных Общий способ конструирования Характеристики производного типа данных Дополнительные способы конструирования Непрерывный, Векторный, H-Векторный, Индексный, H-Индексный, УпакованныйНепрерывныйВекторныйH-ВекторныйИндексныйH-ИндексныйУпакованный Правила соответствия типов Рекомендации по выбору способа конструирования Систематика процессов (коммуникаторы и и группы) Методы работы с группами Методы работы с коммуникаторами Примеры

Параллельные Гергель В.П. ННГУ, Н.Новгород, Конструирование производных типов данных в MPI: постановка проблемы Эффективность параллельность вычислений в распределенной памятью достижима только при минимизации операций пересылки данных Параметр MPI_Datatype в функциях передачи данных может иметь только определенный в MPI тип ? Если нужно передать данные, не описываемые в целом базовым типом MPI, то необходима последовательность операций передач данных?  В MPI возможным является конструирование производных (пользовательских) типов !

Параллельные Гергель В.П. ННГУ, Н.Новгород, Базовые типы данных MPI MPI_Datatype C Datatype MPI_BYTE MPI_CHAR signed char MPI_DOUBLE double MPI_FLOAT float MPI_INT int MPI_LONG long MPI_LONG_DOUBLE long double MPI_PACKED MPI_SHORT short MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED unsigned int MPI_UNSIGNED_LONG unsigned long MPI_UNSIGNED_SHORT unsigned short

Параллельные Гергель В.П. ННГУ, Н.Новгород, Понятие производного типа данных… Под производным типом данных в MPI понимается последовательность данных, описываемая набором {(type 0,, disp 0 ),…,(type n-1, disp n-1 )} где - type i – есть базовый тип i элемента типа; - disp i – есть смещение в байтах для i элемента типа от начала значения типа. Подобный набор описателей составных элементов называется в MPI картой типа (datamap). Список описателей, состоящий только из указания типов элементов, называется сигнатурой типа (type signature) {(type 0,…,type n-1 }

Параллельные Гергель В.П. ННГУ, Н.Новгород, Понятие производного типа данных Пример: double a; /* адрес 24 */ double b; /* адрес 40 */ int n; /* адрес 48 */ Карта типа {(MPI_DOUBLE,0), (MPI_DOUBLE,16), (MPI_INT,24) }

Параллельные Гергель В.П. ННГУ, Н.Новгород, Общий способ конструирования производных типов данных… int MPI_Type_struct(int count, int blocklens[], MPI_Aint offsets[], MPI_Datatype types[], MPI_Datatype *newtype); где - count – количество элементов в типе; - blocklens[] – количества значений в элементах типа; - offsets[] – смещения элементов от начала значения типа; - types[] – типы значений элементов типа; - newtype – имя переменной для ссылки на тип. После использования переменная-дескриптор типа должна быть освобождена int MPI_Type_free(MPI_Datatype *type);

Параллельные Гергель В.П. ННГУ, Н.Новгород, Общий способ конструирования производных типов данных Пример: double a; /* адрес 24 */ double b; /* адрес 40 */ int n; /* адрес 48 */ int BlockLens[3]; MPI_Aint Offsets[3]; MPI_Datatype Types[3]; MPI_Datatype NewType; MPI_Aint addr, start_addr; /* кол-во значений */ BlockLens[0]=BlockLens[1]=BlockLens[2]=1; /* типы */ Types[0]=MPI_DOUBLE; Types[1]=MPI_DOUBLE; Types[2]=MPI_INT; /* смещения */ MPI_Adress(&a,&start_addr); Offsets[0] = 0; MPI_Adress(&b,&addr); Offsets[1] = addr-start_addr; MPI_Adress(&n,&addr); Offsets[2] = addr-start_addr; MPI_Type_struct(3, BlockLens, Offsets, Types, &NewType); MPI_Type_commit(&NewType);

Параллельные Гергель В.П. ННГУ, Н.Новгород, Характеристики производного типа данных… Размер типа –Число байт, которые занимают данные int MPI_Type_size(MPI_Datatype datatype, MPI_Aint *size); Нижняя граница –lb(Typemap) = min ( disp j ) int MPI_Type_lb(MPI_Datatype datatype, MPI_Aint *displacement); Верхняя граница –ub(Typemap) = max ( disp j + sizeof ( type j )) int MPI_Type_ub(MPI_Datatype datatype, MPI_Aint *displacement); Протяженность типа –extent(Typemap) = ub – lb + pad int MPI_Type_extent(MPI_Datatype datatype, MPI_Aint *extent);

Параллельные Гергель В.П. ННГУ, Н.Новгород, Характеристики производного типа данных Протяженность типа приводится в размеру, кратному длине первого значения типа (с тем, чтобы для производного типа можно было бы образовывать вектора) Пример Карта типа {(MPI_DOUBLE,0),(MPI_DOUBLE,16),(MPI_INT,24)} –размер20 (int 4) –нижняя граница 0 –верхняя граница28 –протяженность32

Параллельные Гергель В.П. ННГУ, Н.Новгород, Дополнительные способы конструирования производных типов данных Непрерывный Векторный H-Векторный H-Векторный Индексный H-Индексный H-Индексный Упакованный

Параллельные Гергель В.П. ННГУ, Н.Новгород, Непрерывный способ конструирования производных типов данных Это один из самых простых способов конструирования производных типов данных из count значений существующего типа со смещениями, увеличивающимися на протяженность oldtype (исходного типа). int MPI_Type_contiguous (count, oldtype, newtype)

Параллельные Гергель В.П. ННГУ, Н.Новгород, Векторный способ конструирования производных типов данных Это более общий способ формирования непрерывного типа, который допускает регулярные промежутки между значениями (длина промежутка должна быть кратной протяженности исходного типа данных ). int MPI_Type_vector(int count, int blocklen, int stride, MPI_Datatype old_type, MPI_Datatype *newtype); Пример Вектор x = (x 1,…,x 20 ) с элементами типа double. Необходимо использовать только четные элементы. MPI_Type_vector(10, 1, 2, MPI_DOUBLE, &newtype);

Параллельные Гергель В.П. ННГУ, Н.Новгород, H-Векторный способ конструирования производных типов данных Подобен векторному способу конструирования, но расстояние между элементами задается в байтах. int MPI_Type_hvector(int count, int blocklen, MPI_Aint stride, MPI_Datatype old_type, MPI_Datatype *newtype);

Параллельные Гергель В.П. ННГУ, Н.Новгород, Индексный способ конструирования производных типов данных При создании этого типа используется массив смещений исходного типа данных; единица смещения соответствует протяженности исходного типа данных. int MPI_Type_indexed(int count, int blocklens[], int indices[], MPI_Datatype old_type, MPI_Datatype *newtype);

Параллельные Гергель В.П. ННГУ, Н.Новгород, H-Индексный способ конструирования производных типов данных Подобен индексному, но смещения задаются в байтах. int MPI_Type_hindexed(int count, int blocklens[], int indices[], MPI_Datatype old_type, MPI_Datatype *newtype);

Параллельные Гергель В.П. ННГУ, Н.Новгород, Упакованный способ конструирования производных типов данных… При данном способе пересылаемые данные предварительно собираются (пакуются) в дополнительном буфере; при получении сообщения выполняется обратная операция – распаковка данных. int MPI_Pack(void* sdatbuf, int sdatcount, MPI_Datatype sdattype, void *packbuf, int packsize, int *packpos, MPI_Comm comm) int MPI_Unpack(void* packbuf, int packsize, int *packpos, void *rdatbuf, int rdatcount, MPI_Datatype rdattype, MPI_Comm comm) где - (s datbuf, sdatcount, sdattype) – данные, упаковываемые для передачи, - (packbuf, packsize, packpos) – буфер для упаковки или распаковки, - (r datbuf, rdatcount, rdattype) – данные, распаковываемые после приема сообщения

Параллельные Гергель В.П. ННГУ, Н.Новгород, Упакованный способ конструирования производных типов данных…

Параллельные Гергель В.П. ННГУ, Н.Новгород, Упакованный способ конструирования производных типов данных…

Параллельные Гергель В.П. ННГУ, Н.Новгород, Упакованный способ конструирования производных типов данных Значение packpos указывает позицию буфера для упаковки или распаковки; начальное значение – 0, дальнейшее формирование выполняется функциями MPI_Pack и MPI_Unpack, Для завершения упаковки или распаковки функция MPI_Commit не используется, В функциях передачи данных для типа используется идентификатор MPI_PACKED

Параллельные Гергель В.П. ННГУ, Н.Новгород, Правила соответствия типов Сигнатура типа отправляемого сообщения должна являться начальным отрезком (или совпадать) сигнатуры типа принимаемого сообщения, т.е. Сигнатура отправляемого сообщения {(stype 0,…,stype n-1 } Сигнатура принимаемого сообщения {(rtype 0,…,rtype m-1 }  n  m stype i ==rtype i, 0  i  n-1 ! Для коллективных операций сигнатуры типов во всех процессах должны совпадать

Параллельные Гергель В.П. ННГУ, Н.Новгород, Рекомендации по выбору способа конструирования производных типов данных Если пересылаемые данные образуют непрерывный блок значений одного и того же базового типа – создание производного типа не является необходимым Если данные занимают несмежные области памяти разного размера – целесообразно создание нового типа (в зависимости от количества передач возможно использование упаковки/распаковки данных) Если разрывы (промежутки) между областями значений имеют постоянный размер, наиболее подходящий способ конструирования – векторный метод; при промежутках различного размера выгодным является использование индексного способа конструирования

Параллельные Гергель В.П. ННГУ, Н.Новгород, Систематика процессов (коммуникаторы и и группы) Группа – набор процессов; каждый процесс в пределах группы идентифицируется уникальным номером (рангом) Коммуникатор – группа процессов с определенным контекстом для применения функций MPI (значениями параметров, топологией и др.) Для организации структурности (модульности) процесса вычислений и снижения сложности программирования программистом могут формироваться из существующих процессов новые группы и коммуникаторы

Параллельные Гергель В.П. ННГУ, Н.Новгород, Методы работы с группами Формирование группы из процессов существующего коммуникатора int MPI_Comm_group(MPI_Comm comm, MPI_Group *group); Формирование группы из конкретного набора процессов существующей группы int MPI_Group_incl(MPI_Group oldgroup, int n, int *ranks, MPI_Group *newgroup); Формирование группы путем исключения конкретного набора процессов существующей группы int MPI_Group_excl(MPI_Group oldgroup, int n, int *ranks, MPI_Group *newgroup); Освобождение дескриптора группы (группа не разрушается, если на группу есть ссылка в коммуникаторе) int MPI_Group_free(MPI_Group group); после выполнения функции group==MPI_GROUP_NULL (всего 12 функций)

Параллельные Гергель В.П. ННГУ, Н.Новгород, Методы работы с коммуникаторами… Создание коммуникатора по группе int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm) ; Создание копии коммуникатора int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) ; Удаление коммуникатора int MPI_Comm_free(MPI_Comm comm); после выполнения функции comm==MPI_COMM_NULL (всего 11 функций)

Параллельные Гергель В.П. ННГУ, Н.Новгород, Методы работы с коммуникаторами… Пример: MPI_Group world_group, worker_group; MPI_Comm workers; int ranks[1]; ranks[0] = 0; MPI_Comm_group(MPI_COMM_WORLD, &world_group); MPI_Group_excl(world_group, 1, ranks, &worker_group); MPI_Comm_create(MPI_COMM_WORLD,worker_group,&workers);... MPI_Group_free(worker_group); MPI_Comm_free(workers);

Параллельные Гергель В.П. ННГУ, Н.Новгород, Методы работы с коммуникаторами… Одновременное создание нескольких коммуникаторов int MPI_Comm_split( MPI_Comm oldcomm, int commnum, int newrank, MPI_Comm *newcomm ); где - commnum – номер создаваемого коммуникатора, - newrank – ранг процесса в новом коммуникаторе ! Операция является коллективной для процессов используемого коммуникатора и должна выполниться в каждом процессе

Параллельные Гергель В.П. ННГУ, Н.Новгород, Методы работы с коммуникаторами Пример для использования MPI_Comm_split Формирование логической структуры процессов в виде двумерной решетки (в примере будет показано создание коммуникаторов для каждой строки создаваемой топологии). Пусть p=q*q есть общее количество процессов MPI_Comm comm; int rank, row; MPI_Comm_rank(MPI_COMM_WORLD,&rank); row = rank/q; MPI_Comm_split(MPI_COMM_WORLD,row,rank,&comm); Например, если p=9, то процессы (0,1,2) образуют первый коммуникатор, процессы (3,4,5) – второй и т.д.

Параллельные Гергель В.П. ННГУ, Н.Новгород, Литература 1. “MPI для начинающих” Автор: Илья Евсеев. Учебное пособие плюс примеры. On-line: 2.“Parallel Programming With MPI” Автор: Peter Pacheco 3.“MPI: The Complete Reference” Авторы: Marc Snir, Steve Otto, Steve Huss-Lederman, David Walker, Jack Dongarra 4.“Parallel Processing Online Help With MPI” On-line: 5.“Using MPI. (Portable Parallel Programming with the Message-Passing Interface)” Авторы: W.Group, E.Lusk, A.Skjellum On-line:

Параллельные Гергель В.П. ННГУ, Н.Новгород, Вопросы для обсуждения Рекомендации по использованию разных способов конструирования типов данных Целесообразность использования дополнительных коммуникаторов

Параллельные Гергель В.П. ННГУ, Н.Новгород, Задания для самостоятельной работы Создание производных типов данных для задач линейной алгебры (типы для строк, столбцов, диагоналей, горизонтальных и вертикальных полос, блоков матриц) Создание коммуникаторов для процессов, располагающихся в столбцах прямоугольной решетки

Параллельные Гергель В.П. ННГУ, Н.Новгород, Заключение Методы конструирования производных типов данных Методы создания новых коммуникаторов

Параллельные Гергель В.П. ННГУ, Н.Новгород, Следующая тема Методы разработки параллельных программ при использования интерфейса передачи сообщений MPI-3