Введение в параллельные вычисления. Технология программирования MPI (день седьмой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.

Slides:



Advertisements
Similar presentations
Asynchronous I/O with MPI Anthony Danalis. Basic Non-Blocking API  MPI_Isend()  MPI_Irecv()  MPI_Wait()  MPI_Waitall()  MPI_Waitany()  MPI_Test()
Advertisements

MPI Basics Introduction to Parallel Programming and Cluster Computing University of Washington/Idaho State University MPI Basics Charlie Peck Earlham College.
MPI Fundamentals—A Quick Overview Shantanu Dutt ECE Dept., UIC.
Астрометрические каталоги К.В.Куимов, ГАИШ МГУ. Определение астрометрического каталога Астрометрический каталог – понятие неопределённое. Например, это.
Введение в параллельные вычисления. Технология программирования MPI (день шестой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Половинкин А.Н..  Вычисления общего назначения на GPU  Архитектура GPU  Программная модель выполнения на CUDA  Программирование с использованием CUDA.
Некомпенсаторное агрегирование и рейтингование студентов Авторы: Гончаров Алексей Александрович, Чистяков Вячеслав Васильевич. НФ ГУ ВШЭ 2010 год.
Определение необходимого уровня запасов на складе.
Российский государственный педагогический университет им. А.И. Герцена ИНСТИТУТ ДОВУЗОВСКОЙ ПОДГОТОВКИ Дистанционное обучение «Русский язык. Подготовка.
Создание сервиса синхронизации разнородных баз данных Допущена к защите зав. кафедрой: д.ф.м.н., профессор Терехов А.Н. Научный руководитель: доцент Графеева.
Виртуальная лаборатория для первоначального обучения проектированию программ Н. Н. Красильников, В. Г. Парфенов, Ф. Н. Царев, А. А. Шалыто Кафедра компьютерных.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 8 Методы разработки параллельных программ при использования интерфейса передачи.
Derived Datatypes and Related Features. Introduction In previous sections, you learned how to send and receive messages in which all the data was of a.
Особенности Java. Блок static static { } Создание и уничтожение объектов  new – создание объекта  finalyze()
Язык JavaScript Скриптовый язык для выполнения на html-страницах.
Введение в параллельные вычисления. Технология программирования MPI (день третий) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Анатомия класса. Схожесть с др. языками   С# похож на язык Java в том, что он требует, чтобы вся программная логика была заключена в определения типов.
PHP как язык программирования. Типы данных логические величины int, integer – целые числа real, double, float – вещественные числа string – строки array.
Введение в параллельные вычисления. Технология программирования MPI (день второй) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 16 Методы разработки параллельных программ для многопроцессорных систем с общей.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 4 Методы разработки параллельных программ при использования интерфейса передачи.
Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property.
Distributed Memory Programming with MPI. What is MPI? Message Passing Interface (MPI) is an industry standard message passing system designed to be both.
1 Влияние машинной архитектуры Структура и принципы работы компьютера На разрабатываемый язык программирования машинная архитектура влияет двояко: –непосредственно.
Взвешенные скелеты для простых многоугольников Дипломная работа студента 544 группы Игнатьевского Сергея Васильевича Научный руководитель: К.В. Вяткина.
Синтаксис языка Java.
12b.1 Introduction to Message-passing with MPI UNC-Wilmington, C. Ferner, 2008 Nov 4, 2008.
Работа с массивами в C#.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 15 Методы разработки параллельных программ для многопроцессорных систем с общей.
Its.unc.edu 1 Derived Datatypes Research Computing UNC - Chapel Hill Instructor: Mark Reed
MPI User-defined Datatypes Techniques for describing non- contiguous and heterogeneous data.
Введение в параллельные вычисления. Технология программирования MPI (день пятый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Обработка исключений Гудов А.М., Завозкин С.Ю
XML - расширенный язык разметки Моисеевой О. Макушиной Д. (eXtensible Markup Language)
Visual Basic 7 Объектно-ориентированный язык программирования.
XML Схемы XML документов. XML Schema созданая Microsoft позволяет избавиться от DTD блоков. Основа – использование пространств имен и очень точная типизация.
Введение в параллельные вычисления. Технология программирования MPI (день четвертый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Языки описания информации Лекция 3. Кафедра «ОСУ» Весенний семестр 2010/2011 уч. года XML Schema и XLink.
Microsoft TechDayshttp:// Александр Шаповал Эксперт по стратегическим технологиям
1 MPI Datatypes l The data in a message to sent or received is described by a triple (address, count, datatype), where l An MPI datatype is recursively.
Parallel Programming with MPI Matthew Pratola
R E F R I G E R A T I O N A N D A I R C O N D I T I O N I N G Блок мониторинга и централизованного управления АK-SM 350.
1 R E F R I G E R A T I O N A N D A I R C O N D I T I O N I N G Как обновить программное обеспечение в AK-SC 255.
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.
High Performance Parallel Programming Dirk van der Knijff Advanced Research Computing Information Division.
Message Passing Programming Model AMANO, Hideharu Textbook pp. 140-147.
Summary of MPI commands Luis Basurto. Large scale systems Shared Memory systems – Memory is shared among processors Distributed memory systems – Each.
Distributed-Memory (Message-Passing) Paradigm FDI 2004 Track M Day 2 – Morning Session #1 C. J. Ribbens.
Lecture 6: Message Passing Interface (MPI). Parallel Programming Models Message Passing Model Used on Distributed memory MIMD architectures Multiple processes.
HTTP ANDROID CLUB 2015.
MPI: the last episode By: Camilo A. Silva. Topics Modularity Data Types Buffer issues + Performance issues Compilation using MPICH2 Other topics: MPI.
MPI Workshop - III Research Staff Cartesian Topologies in MPI and Passing Structures in MPI Week 3 of 3.
Микропроцессорные системы Программирование INTEL 8086 Системная программа Debug.
1 Using PMPI routines l PMPI allows selective replacement of MPI routines at link time (no need to recompile) l Some libraries already make use of PMPI.
Grouping Data and Derived Types in MPI. Grouping Data Messages are expensive in terms of performance Grouping data can improve the performance of your.
Parallel Algorithms & Implementations: Data-Parallelism, Asynchronous Communication and Master/Worker Paradigm FDI 2007 Track Q Day 2 – Morning Session.
OpenCL. #include int main() { cl_platform_id platform[10]; cl_uint num_platforms; clGetPlatformIDs(10, platform, &num_platforms); cl_int clGetPlatformIDs.
Внимание! Так как файлы с поддержкой макроса невозможно загрузить, необходимо через режим разработчика вставьте этот код (Файл-Параметры-Настройка Ленты-
Introduction to MPI Programming Ganesh C.N.
Introduction to MPI Programming
Distributed Memory Programming with MPI
Dr. David Cronk Innovative Computing Lab University of Tennessee
Programming with MPI.
Точечные взаимодействия
Решение типовых расчетных задач по формулам. Определение массовой доли элементов Массовая доля элемента ω(Э) % - это отношение массы данного элемента.
Сортировка, поиск и фильтрация данных в базе данных и выборках
Message Passing Programming Based on MPI
Hello, world in MPI #include <stdio.h> #include "mpi.h"
Hello, world in MPI #include <stdio.h> #include "mpi.h"
Presentation transcript:

Введение в параллельные вычисления. Технология программирования MPI (день седьмой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных информационных технологий НИВЦ МГУ

MPI Сообщение – массив однотипных данных, расположенных в последовательных ячейках памяти. Для пересылки разнотипных данных можно использовать: Производные типы данных Упаковку данных

MPI Производные типы данных создаются во время выполнения программы с помощью подпрограмм-конструкторов. Создание типа: Конструирование типа Регистрация типа

MPI Производный тип данных характеризуется последовательностью базовых типов и набором значений смещения относительно начала буфера обмена. Смещения могут быть как положительными, так и отрицательными, не требуется их упорядоченность.

MPI MPI_TYPE_CONTIGUOUS(COUNT, TYPE, NEWTYPE, IERR) INTEGER COUNT, TYPE, NEWTYPE, IERR Создание нового типа данных NEWTYPE, состоящего из COUNT последовательно расположенных элементов базового типа данных TYPE.

MPI MPI_TYPE_VECTOR(COUNT, BLOCKLEN, STRIDE, TYPE, NEWTYPE, IERR) INTEGER COUNT, BLOCKLEN, STRIDE, TYPE, NEWTYPE, IERR Создание нового типа данных NEWTYPE, состоящего из COUNT блоков по BLOCKLEN элементов базового типа данных TYPE. Следующий блок начинается через STRIDE элементов после начала предыдущего.

MPI count=2 blocklen=3 stride=5 call MPI_TYPE_VECTOR(count, blocklen, & stride, MPI_DOUBLE_PRECISION, & newtype, ierr) Создание нового типа данных (тип элемента, количество элементов от начала буфера): {( MPI_DOUBLE, 0), ( MPI_DOUBLE, 1), ( MPI_DOUBLE, 2), ( MPI_DOUBLE, 5), ( MPI_DOUBLE, 6), ( MPI_DOUBLE, 7)}

MPI MPI_TYPE_HVECTOR(COUNT, BLOCKLEN, STRIDE, TYPE, NEWTYPE, IERR) INTEGER COUNT, BLOCKLEN, STRIDE, TYPE, NEWTYPE, IERR Создание нового типа данных NEWTYPE, состоящего из COUNT блоков по BLOCKLEN элементов базового типа данных TYPE. Следующий блок начинается через STRIDE байт после начала предыдущего.

MPI MPI_TYPE_INDEXED(COUNT, BLOCKLENS, DISPLS, TYPE, NEWTYPE, IERR) INTEGER COUNT, BLOCKLENS(*), DISPLS(*), TYPE, NEWTYPE, IERR Создание нового типа данных NEWTYPE, состоящего из COUNT блоков по BLOCKLENS(I) элементов базового типа данных. I -й блок начинается через DISPLS(I) элементов с начала буфера.

MPI do i=1,N blocklens(i)=N-i+1 displs(i)=N*(i-1)+i-1 end do call MPI_TYPE_INDEXED(N, blocklens, & displs, MPI_DOUBLE_PRECISION, & newtype, ierr) Создание нового типа данных для описания нижнедиагональной матрицы.

MPI MPI_TYPE_HINDEXED(COUNT, BLOCKLENS, DISPLS, TYPE, NEWTYPE, IERR) INTEGER COUNT, BLOCKLENS(*), DISPLS(*), TYPE, NEWTYPE, IERR Создание нового типа данных NEWTYPE, состоящего из COUNT блоков по BLOCKLENS(I) элементов базового типа данных. I -й блок начинается через DISPLS(I) байт с начала буфера.

MPI MPI_TYPE_STRUCT(COUNT, BLOCKLENS, DISPLS, TYPES, NEWTYPE, IERR) INTEGER COUNT, BLOCKLENS(*), DISPLS(*), TYPES(*), NEWTYPE, IERR Создание структурного типа данных из COUNT блоков по BLOCKLENS(I) элементов типа TYPES(I). I -й блок начинается через DISPLS(I) байт.

MPI blocklens(1)=3 blocklens(2)=2 types(1)=MPI_DOUBLE_PRECISION types(2)=MPI_CHAR displs(1)=0 displs(2)=24 call MPI_TYPE_STRUCT(2, blocklens, & displs, types, newtype, ierr) Создание нового типа данных (тип элемента, количество байт от начала буфера): {( MPI_DOUBLE, 0), ( MPI_DOUBLE, 8), ( MPI_DOUBLE, 16), ( MPI_CHAR, 24), ( MPI_CHAR, 25)}

MPI MPI_TYPE_COMMIT(DATATYPE, IERR) INTEGER DATATYPE, IERR Регистрация созданного производного типа данных DATATYPE. После регистрации этот тип данных можно использовать в операциях обмена.

MPI MPI_TYPE_FREE(DATATYPE, IERR) INTEGER DATATYPE, IERR Аннулирование производного типа данных DATATYPE. DATATYPE устанавливается в значение MPI_DATATYPE_NULL. Производные от DATATYPE типы данных остаются. Предопределенные типы данных не могут быть аннулированы.

MPI MPI_TYPE_SIZE(DATATYPE, SIZE, IERR) INTEGER DATATYPE, SIZE, IERR Определение размера типа DATATYPE в байтах (объема памяти, занимаемого одним элементом данного типа).

MPI MPI_TYPE_LB(DATATYPE, DISPL, IERR) INTEGER DATATYPE, DISPL, IERR Определение смещения DISPL в байтах нижней границы элемента типа данных DATATYPE от базового адреса.

MPI MPI_TYPE_UB(DATATYPE, DISPL, IERR) INTEGER DATATYPE, DISPL, IERR Определение смещения DISPL в байтах верхней границы элемента типа данных DATATYPE от базового адреса.

MPI MPI_TYPE_EXTENT(DATATYPE, EXTENT, IERR) INTEGER DATATYPE, EXTENT, IERR Определение диапазона типа DATATYPE в байтах (разницы между верхней и нижней границами элемента данного типа).

MPI MPI_ADDRESS(LOCATION, ADDRESS, IERR) LOCATION(*) INTEGER ADDRESS, IERR Определение абсолютного байт-адреса ADDRESS размещения массива LOCATION в оперативной памяти. Адрес отсчитывается от базового адреса, значение которого содержится в константе MPI_BOTTOM.

MPI blocklens(1)=1 blocklens(2)=1 types(1)=MPI_DOUBLE_PRECISION types(2)=MPI_CHAR call MPI_ADDRESS(dat1, address(1), ierr) displs(1)=address(1) call MPI_ADDRESS(dat2, address(2), ierr) displs(2)=address(2) call MPI_TYPE_STRUCT(2, blocklens, & displs, types, newtype, ierr) call MPI_TYPE_COMMIT(newtype, ierr) call MPI_SEND(MPI_BOTTOM, 1, newtype, & dest, tag, MPI_COMM_WORLD, ierr)

MPI MPI_PACK(INBUF, INCOUNT, DATATYPE, OUTBUF, OUTSIZE, POSITION, COMM, IERR) INBUF(*), OUTBUF(*) INTEGER INCOUNT, DATATYPE, OUTSIZE, POSITION, COMM, IERR Упаковка INCOUNT элементов типа DATATYPE из массива INBUF в массив OUTBUF со сдвигом POSITION байт. OUTBUF должен содержать OUTSIZE байт.

MPI Параметр POSITION увеличивается на число байт, равное размеру записи. Параметр COMM указывает на коммуникатор, в котором в дальнейшем будет пересылаться сообщение.

MPI MPI_UNPACK(INBUF, INSIZE, POSITION, OUTBUF, OUTCOUNT, DATATYPE, COMM, IERR) INBUF(*), OUTBUF(*) INTEGER INSIZE, POSITION, OUTCOUNT, DATATYPE, COMM, IERR Распаковка из массива INBUF со сдвигом POSITION байт в массив OUTBUF OUTCOUNT элементов типа DATATYPE.

MPI MPI_PACK_SIZE(INCOUNT, DATATYPE, COMM, SIZE, IERR) INTEGER INCOUNT, DATATYPE, COMM, SIZE, IERR Определение необходимого объема памяти (в байтах) для упаковки INCOUNT элементов типа DATATYPE.

MPI real a(10) character b(10), buf(100) position=0 if(rank.eq. 0) then call MPI_PACK(a, 10, MPI_REAL, buf, 100, & position, MPI_COMM_WORLD, ierr) call MPI_PACK(b, 10, MPI_CHAR, buf, 100, & position, MPI_COMM_WORLD, ierr) call MPI_BCAST(buf, 100, & MPI_PACKED, 0,MPI_COMM_WORLD, ierr)

MPI else call MPI_BCAST(buf, 100, MPI_PACKED, 0, & MPI_COMM_WORLD, ierr) position=0 call MPI_UNPACK(buf, 100, position, a, & 10, MPI_REAL, MPI_COMM_WORLD, ierr) call MPI_UNPACK(buf, 100, position, b, & 10, MPI_CHAR, MPI_COMM_WORLD, ierr) end if