SlideShare une entreprise Scribd logo
1  sur  57
Реализация параллельного алгоритма с использованием  MPI
Содержание ,[object Object],[object Object],[object Object],[object Object],[object Object]
Стандарт  MPI
Стандарт  MPI ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Стандарт  MPI ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Термины  MPI
Термины  MPI ,[object Object],[object Object],[object Object]
Термины  MPI ,[object Object],[object Object]
Термины  MPI Режимы выполнения   С блокировкой   Без блокировки   Стандартная посылка  MPI_Send MPI_Isend Синхронная посылка MPI_Ssend MPI_Issend Буферизованная посылка MPI_Bsend MPI_Ibsend Согласованная посылка MPI_Rsend MPI_Irsend Прием информации MPI_Recv MPI_Irecv
Термины  MPI ,[object Object],[object Object],[object Object]
Термины  MPI ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Термины  MPI ,[object Object],[object Object],[object Object],[object Object]
Структура  MPI- программы
Структура  MPI- программы ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Структура  MPI- программы ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Структура  MPI- программы ,[object Object],[object Object],[object Object],[object Object]
Структура  MPI- программы ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Основные функции  MPI
Основные функции  MPI ,[object Object],[object Object],[object Object],[object Object]
Основные функции  MPI ,[object Object],[object Object],[object Object],[object Object],[object Object]
Основные функции  MPI ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Блокирующие функции обмена сообщениями
Блокирующие функции обмена сообщениями ,[object Object],[object Object],[object Object],[object Object]
Блокирующие функции обмена сообщениями ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Блокирующие функции обмена сообщениями ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Блокирующие функции обмена сообщениями ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Типы данных MPI C MPI_CHAR signed char MPI_SHORT signed short int MPI_INT signed int MPI_LONG signed long int MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED_SHORT unsigned short int MPI_UNSIGNED unsigned int MPI_UNSIGNED_LONG unsigned long int MPI_FLOAT float MPI_DOUBLE double MPI_LONG_DOUBLE long double
Настройка проекта в  Visual Studio 200 8
Настройка проекта в  Visual Studio 200 8 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Настройка проекта в  Visual Studio 200 8
Настройка проекта в  Visual Studio 200 8
Настройка проекта в  Visual Studio 200 8
Настройка проекта в  Visual Studio 200 8
Выполнение упражнения
Выполнение упражнения Master Worker Worker Master Master Send / Recv Worker
Выполнение упражения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Выполнение упражнения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Выполнение упражнения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Выполнение упражнения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Выполнение упражнения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Выполнение упражения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Выполнение упражнения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Выполнение упражнения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Выполнение упражнения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Выполнение упражнения ,[object Object]
9 . В файле  “Main. cpp”  уберите комментарии  для строки   chunk = ContrastStretch(chunk, myrows, mycols, steps, stepby, MPI_PIXEL_T);  Измените определение функций  ContrastStretch   в файл  “app.h”  : PIXEL_T **ContrastStretch(PIXEL_T **image, int rows, int cols, int  steps, int stepby,  MPI_Datatype MPI_PIXEL_T ); Откройте файл  ContrastStretch.cpp  и измените код в соответствии с  PIXEL_T **ContrastStretch(PIXEL_T **image, int rows, int cols, int  steps, int stepby,  MPI_Datatype MPI_PIXEL_T ) { cout << myRank << &quot; (&quot; << host << &quot;): Processing &quot; << rows << &quot;rows,&quot;   << cols << &quot; cols...&quot; << endl; PIXEL_T **image2 = New2dMatrix<PIXEL_T>( rows+2 , cols); MPI_Status status; int  tag  = 0; // Обратите внимание на два дополнительных строки Выполнение упражнения
Выполнение упражнения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Выполнение упражнения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],0 1 2 3
Выполнение упражнения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Выполнение упражнения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Выполнение упражнения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],Выполнение упражнения
Выполнение упражнения ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Выполнение упражнения
Заключение
© 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation.  Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.  MICROSOFT MAKES NO WARRANTIES, EXPRESS,  IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

Contenu connexe

Tendances

C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
Technopark
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
Technopark
 
подпрограммы в языке программирования паскаль
подпрограммы в языке программирования паскальподпрограммы в языке программирования паскаль
подпрограммы в языке программирования паскаль
Artem German
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
Technopark
 
20120218 model checking_karpov_lecture02
20120218 model checking_karpov_lecture0220120218 model checking_karpov_lecture02
20120218 model checking_karpov_lecture02
Computer Science Club
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
Michael Karpov
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9
Technopark
 

Tendances (15)

лекция 3
лекция 3лекция 3
лекция 3
 
Лекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPIЛекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPI
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 
лек11 4
лек11 4лек11 4
лек11 4
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
 
лек13 4
лек13 4лек13 4
лек13 4
 
подпрограммы в языке программирования паскаль
подпрограммы в языке программирования паскальподпрограммы в языке программирования паскаль
подпрограммы в языке программирования паскаль
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
 
Отладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программОтладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программ
 
20120218 model checking_karpov_lecture02
20120218 model checking_karpov_lecture0220120218 model checking_karpov_lecture02
20120218 model checking_karpov_lecture02
 
20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9
 
Vba программы
Vba программыVba программы
Vba программы
 

En vedette

20080224 efficientalgorithms kulikov_lecture14
20080224 efficientalgorithms kulikov_lecture1420080224 efficientalgorithms kulikov_lecture14
20080224 efficientalgorithms kulikov_lecture14
Computer Science Club
 

En vedette (7)

20080224 efficientalgorithms kulikov_lecture14
20080224 efficientalgorithms kulikov_lecture1420080224 efficientalgorithms kulikov_lecture14
20080224 efficientalgorithms kulikov_lecture14
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
 
О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"О.В.Сухорослов "Параллельное программирование. Часть 2"
О.В.Сухорослов "Параллельное программирование. Часть 2"
 
Кружок по робототехнике. Занятие #2. Программируем моторы
Кружок по робототехнике. Занятие #2. Программируем моторыКружок по робототехнике. Занятие #2. Программируем моторы
Кружок по робототехнике. Занятие #2. Программируем моторы
 
Кружок по робототехнике. Занятие #2. Lego Mindstorms NXT
Кружок по робототехнике. Занятие #2. Lego Mindstorms NXTКружок по робототехнике. Занятие #2. Lego Mindstorms NXT
Кружок по робототехнике. Занятие #2. Lego Mindstorms NXT
 
Основы ооп на языке C#. Часть 2. базовый синтаксис.
Основы ооп на языке C#. Часть 2. базовый синтаксис.Основы ооп на языке C#. Часть 2. базовый синтаксис.
Основы ооп на языке C#. Часть 2. базовый синтаксис.
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программирование
 

Similaire à 20090721 hpc exercise2

отладка Mpi приложений
отладка Mpi приложенийотладка Mpi приложений
отладка Mpi приложений
Michael Karpov
 
C++ теория
C++ теорияC++ теория
C++ теория
tank1975
 
инструменты параллельного программирования
инструменты параллельного программированияинструменты параллельного программирования
инструменты параллельного программирования
Alexander Petrov
 
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPIMPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
Mikhail Kurnosov
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
GoSharp
 
10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft
KewpaN
 

Similaire à 20090721 hpc exercise2 (20)

отладка Mpi приложений
отладка Mpi приложенийотладка Mpi приложений
отладка Mpi приложений
 
Prezent
PrezentPrezent
Prezent
 
Prezent
PrezentPrezent
Prezent
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)
 
C++ теория
C++ теорияC++ теория
C++ теория
 
C++ теория
C++ теорияC++ теория
C++ теория
 
Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)
 
инструменты параллельного программирования
инструменты параллельного программированияинструменты параллельного программирования
инструменты параллельного программирования
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
Pythonic way of using BTRFS features
Pythonic way of using BTRFS featuresPythonic way of using BTRFS features
Pythonic way of using BTRFS features
 
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPIMPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAP
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
 
10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)
 
МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
Лекция 3. Виртуальные топологии в MPI. Параллельные алгоритмы в стандарте MPI...
 
[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)
 
Парсим и кодогенерируем для С++ с использованием clang
Парсим и кодогенерируем для С++ с использованием clangПарсим и кодогенерируем для С++ с использованием clang
Парсим и кодогенерируем для С++ с использованием clang
 

Plus de Michael Karpov

Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...
Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...
Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...
Michael Karpov
 
Hpc Visualization with WebGL
Hpc Visualization with WebGLHpc Visualization with WebGL
Hpc Visualization with WebGL
Michael Karpov
 
Hpc Visualization with X3D (Michail Karpov)
Hpc Visualization with X3D (Michail Karpov)Hpc Visualization with X3D (Michail Karpov)
Hpc Visualization with X3D (Michail Karpov)
Michael Karpov
 
"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile команде"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile команде
Michael Karpov
 
"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile команде"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile команде
Michael Karpov
 
Высоконагруженая команда - AgileDays 2010
Высоконагруженая команда - AgileDays 2010Высоконагруженая команда - AgileDays 2010
Высоконагруженая команда - AgileDays 2010
Michael Karpov
 

Plus de Michael Karpov (20)

EdCrunch 2018 - Skyeng - EdTech product scaling: How to influence key growth ...
EdCrunch 2018 - Skyeng - EdTech product scaling: How to influence key growth ...EdCrunch 2018 - Skyeng - EdTech product scaling: How to influence key growth ...
EdCrunch 2018 - Skyeng - EdTech product scaling: How to influence key growth ...
 
Movement to business goals: Data, Team, Users (4C Conference)
Movement to business goals: Data, Team, Users (4C Conference)Movement to business goals: Data, Team, Users (4C Conference)
Movement to business goals: Data, Team, Users (4C Conference)
 
Save Africa: NASA hackathon 2016
Save Africa: NASA hackathon 2016 Save Africa: NASA hackathon 2016
Save Africa: NASA hackathon 2016
 
Из третьего мира - в первый: ошибки в развивающихся продуктах (AgileDays 2014)
Из третьего мира - в первый: ошибки в развивающихся продуктах (AgileDays 2014) Из третьего мира - в первый: ошибки в развивающихся продуктах (AgileDays 2014)
Из третьего мира - в первый: ошибки в развивающихся продуктах (AgileDays 2014)
 
Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...
Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...
Один день из жизни менеджера. Тактика: хорошие практики, скрытые опасности и ...
 
Поговорим про ошибки (Sumit)
Поговорим про ошибки (Sumit)Поговорим про ошибки (Sumit)
Поговорим про ошибки (Sumit)
 
(2niversity) проектная работа tips&tricks
(2niversity) проектная работа   tips&tricks(2niversity) проектная работа   tips&tricks
(2niversity) проектная работа tips&tricks
 
"Пользователи: сигнал из космоса". CodeFest mini 2012
"Пользователи: сигнал из космоса". CodeFest mini 2012"Пользователи: сигнал из космоса". CodeFest mini 2012
"Пользователи: сигнал из космоса". CodeFest mini 2012
 
(Analyst days2012) Как мы готовим продукты - вклад аналитиков
(Analyst days2012) Как мы готовим продукты - вклад аналитиков(Analyst days2012) Как мы готовим продукты - вклад аналитиков
(Analyst days2012) Как мы готовим продукты - вклад аналитиков
 
Как сделать команде приятное - Михаил Карпов (Яндекс)
Как сделать команде приятное - Михаил Карпов (Яндекс)Как сделать команде приятное - Михаил Карпов (Яндекс)
Как сделать команде приятное - Михаил Карпов (Яндекс)
 
Как мы готовим продукты
Как мы готовим продуктыКак мы готовим продукты
Как мы готовим продукты
 
Hpc Visualization with WebGL
Hpc Visualization with WebGLHpc Visualization with WebGL
Hpc Visualization with WebGL
 
Hpc Visualization with X3D (Michail Karpov)
Hpc Visualization with X3D (Michail Karpov)Hpc Visualization with X3D (Michail Karpov)
Hpc Visualization with X3D (Michail Karpov)
 
сбор требований с помощью Innovation games
сбор требований с помощью Innovation gamesсбор требований с помощью Innovation games
сбор требований с помощью Innovation games
 
Зачем нам Это? или Как продать agile команде
Зачем нам Это? или Как продать agile командеЗачем нам Это? или Как продать agile команде
Зачем нам Это? или Как продать agile команде
 
"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile команде"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile команде
 
"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile команде"Зачем нам Это?" или как продать Agile команде
"Зачем нам Это?" или как продать Agile команде
 
HPC Visualization
HPC VisualizationHPC Visualization
HPC Visualization
 
Hpc Visualization
Hpc VisualizationHpc Visualization
Hpc Visualization
 
Высоконагруженая команда - AgileDays 2010
Высоконагруженая команда - AgileDays 2010Высоконагруженая команда - AgileDays 2010
Высоконагруженая команда - AgileDays 2010
 

20090721 hpc exercise2

  • 2.
  • 4.
  • 5.
  • 7.
  • 8.
  • 9. Термины MPI Режимы выполнения С блокировкой Без блокировки Стандартная посылка MPI_Send MPI_Isend Синхронная посылка MPI_Ssend MPI_Issend Буферизованная посылка MPI_Bsend MPI_Ibsend Согласованная посылка MPI_Rsend MPI_Irsend Прием информации MPI_Recv MPI_Irecv
  • 10.
  • 11.
  • 12.
  • 13. Структура MPI- программы
  • 14.
  • 15.
  • 16.
  • 17.
  • 19.
  • 20.
  • 21.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27. Типы данных MPI C MPI_CHAR signed char MPI_SHORT signed short int MPI_INT signed int MPI_LONG signed long int MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED_SHORT unsigned short int MPI_UNSIGNED unsigned int MPI_UNSIGNED_LONG unsigned long int MPI_FLOAT float MPI_DOUBLE double MPI_LONG_DOUBLE long double
  • 29.
  • 35. Выполнение упражнения Master Worker Worker Master Master Send / Recv Worker
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47. 9 . В файле “Main. cpp” уберите комментарии для строки chunk = ContrastStretch(chunk, myrows, mycols, steps, stepby, MPI_PIXEL_T); Измените определение функций ContrastStretch в файл “app.h” : PIXEL_T **ContrastStretch(PIXEL_T **image, int rows, int cols, int steps, int stepby, MPI_Datatype MPI_PIXEL_T ); Откройте файл ContrastStretch.cpp и измените код в соответствии с PIXEL_T **ContrastStretch(PIXEL_T **image, int rows, int cols, int steps, int stepby, MPI_Datatype MPI_PIXEL_T ) { cout << myRank << &quot; (&quot; << host << &quot;): Processing &quot; << rows << &quot;rows,&quot; << cols << &quot; cols...&quot; << endl; PIXEL_T **image2 = New2dMatrix<PIXEL_T>( rows+2 , cols); MPI_Status status; int tag = 0; // Обратите внимание на два дополнительных строки Выполнение упражнения
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 57. © 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

Notes de l'éditeur

  1. MPI – стандарт системы параллельного программирования, основанный на модели обмена сообщениями. Версия стандарта 1.1 описывает следующие виды взаимодействия параллельных процессов : Парные обмены – группа операций приема-передачи сообщений от одного процесса другому. Коллективные операции – к ним относятся операции, задействующие все или ряд выделенных процессов. Операции над группами и коммуникационными контекстами – операции, связанные с порождением и управлением группами процессов и коммуникаторами Топологии процессов – в этом разделе стандарта описаны поддерживаемые MPI виды процессных топологий и операции работы с ними Привязки к языкам – пожалуй, самый большой раздел стандарта, описывающий синтаксис вызовов библиотечных функций MPI из программ на C и Fortran . Основными реализациями являются MPICH и MSMPI
  2. Необходимо понимать, что MPI описывает семантику взаимодействия процессов только через СВОИ функции. Если программист пользуется другими инструментами – прямой доступ к памяти и сети, межпроцессные обмены и каналы – он делает это на свой страх и риск  Также, одной из основных целей создания MPI как стандарта было разработать кросс-платформенное решение. Ни одна операция MPI не является платформозависимой, лишь конкретная реализация стандарта будет вносить свои коррективы прозрачно для программиста. В стандарт не входят описания инструментов отладки и поддержки управления задачами, хотя бы потому, что такие инструменты являются платформозависимыми. Поставщики реализаций MPI могут поставлять такие инструменты самостоятельно.
  3. Локальной называется операция, не вызывающая взаимодействия процессов. Используя такую операцию мы можем быть уверены, что никакой обмен информацией между процессами не производится. Нелокальная операция МОЖЕТ при необходимости вызывать взаимодействие процессов. Необходимо отметить, что одна и та же операция в зависимости от условий ее выполнения может быть как локальной, так и нелокальной – см. пример MPI_Send с буферизацией и без Коллективная операция – это операция, которая ОБЯЗАТЕЛЬНО должна вызываться всеми процессами группы, в рамках которой она производится. Если некоторый процесс группы опрацию не вызывает, это считается ошибкой хода выполнения.
  4. Блокирующие функции подразумевают выход из них только после полного окончания операции, т.е. вызывающий процесс блокируется, пока операция не будет завершена. Для функции посылки сообщения это означает, что все пересылаемые данные помещены в буфер (для разных реализаций MPI это может быть либо какой-то промежуточный системный буфер, либо непосредственно буфер получателя). Для функции приема сообщения блокируется выполнение других операций, пока все данные из буфера не будут помещены в адресное пространство принимающего процесса. Ресурсы, указанные в ее параметрах, можно безопасно использовать повторно (например, данные переданы или скопированы в системный буфер). Неблокирующие функции подразумевают совмещение операций обмена с другими операциями, поэтому неблокирующие функции передачи и приема по сути дела являются функциями инициализации соответствующих операций. Для опроса завершенности операции (и завершения) вводятся дополнительные функции.
  5. Префикс S (synchronous) - означает синхронный режим передачи данных. Операция передачи данных заканчивается только тогда, когда заканчивается прием данных. Функция нелокальная. Префикс B (buffered) - означает буферизованный режим передачи данных. В адресном пространстве передающего процесса с помощью специальной функции создается буфер обмена, который используется в операциях обмена. Операция посылки заканчивается, когда данные помещены в этот буфер. Функция имеет локальный характер. Префикс R (ready) - согласованный или подготовленный режим передачи данных. Операция передачи данных начинается только тогда, когда принимающий процессор выставил признак готовности приема данных, инициировав операцию приема. Функция нелокальная. Префикс I (immediate) - относится к неблокирующим операциям. Все функции передачи и приема сообщений могут использоваться в любой комбинации друг с другом. Функции передачи, находящиеся в одном столбце, имеют совершенно одинаковый синтаксис и отличаются только внутренней реализацией. Поэтому в дальнейшем будем рассматривать только стандартный режим, который в обязательном порядке поддерживают все реализации MPI.
  6. С момента своего запуска любая правильно написанная MPI программа должна пройти следущие этапы : Запуск – программа запускается планировщиком. Инициализация среды – на этом этапе в среде MPi устанавливаются необходимые параметры и порождаются внутренние объекты. Также именно здесь создается глобальный и локальный коммуникаторы MPI_COMM_WORLD и MPI_COMM_SELF Непосредственно вычисления – выполнение кода, написанного программистом. Завершение среды MPI – освобождение ресурсов, занятых средой MPI . Повторная инициализация среды невозможна. Выгрузка – освобождение ресурсов, занятых процессами, их закрытие.
  7. Любая MPI-программа (приложение) должна начинаться с вызова функции инициализации MPI: функции MPI_Init. В результате выполнения этой функции создается группа процессов, в которую помещаются все процессы приложения, и создается область связи, описываемая предопределенным всеобщим коммуникатором MPI_COMM_WORLD. Эта область связи объединяет все процессы-приложения. Процессы в группе упорядочены и пронумерованы от 0 до groupsize-1, где groupsize равно числу процессов в группе. Кроме этого, создается предопределенный коммуникатор MPI_COMM_SELF, описывающий свою область связи для каждого отдельного процесса. До вызова MPI_INIT любые вызовы функций MPI, кроме MPI_Initialized , будут заканчиваться ошибкой. В программах на C каждому процессу при инициализации передаются аргументы функции main, полученные из командной строки. В программах на языке FORTRAN параметр IERROR является выходным и возвращает код ошибки.
  8. Если какой-либо процесс закончит свою работу до вызова MPI_Finalize (например, аварийно) , MPI- программа завершится с ошибкой. После вызова MPI_Finalize невозможен вызов ни одной функции библиотеки MPI
  9. Рассмотрим структуру MPI приложения: mpi.h – заголовочный файл, в котором определены все функции MPI argv – аргументы командной строки argc – их количество Пример - simplest
  10. После выполнения этой функции в переменную flag будет сохранено значение 1 ( True) , если среда выполнения MPI инициализирована (то есть, был успешный вызов MPI_Init()) , либо 0, в противном случае.
  11. MPI _Comm_size возвращает в переменную size количество процессов в коммуникаторе comm. Подставляя в эту функцию всеобщий коммуникатор MPI_COMM_WORLD мы можем получить количество процессов, на которых запущена программа.
  12. MPI_Comm_rank возвращает номер процесса (то есть, ранг), вызвавшего ее. Номера процессов всегда лежат на интервале 0 … &lt; размер группы &gt; – 1 и, естетсвенно, уникальны для каждой группы. При этом ранг процесса в коммуникаторе MPI_COMM_WORLD можно считать абсолютным рангом процесса. Ранги процесса в других (созданных программистом, об этом в MPI advanced techniques) будут относительными.
  13. Сообщения в MPI передаются как пакеты, содержащие данные вместе с информацией их описывающей. Наличие информации, например, о реальном размере передаваемых данных может оказаться весьма полезной в некоторых случаях. При отправке сообщения мы должны указать следующие параметры : Собственно, массив данных, которые мы хотим передать. Размер массива передаваемых данных – система выполнения должна точно знать, сколько данных мы передаем. О типах данных ниже. Процесс-получатель сообщения – при парных обменах вполне естественный параметр. Тег данных – это специальная метка, позволяющая в программе отличать одни данные от других. Тег задается программистом произвольно. При приеме сообщения также необходимо указывать буфер данных, в котором данные принятого сообщения будут сохранены, размер этого буфера, тег принимаемых данных и процесс-отправитель сообщения. При вызове команды получения данных система будет искать сообщение с запрошенными тегом и процессом-отправителем. Если будет найдено сообщение с указанными значениями, оно будет принято и сохранено. Иначе система будет ждать, пока нужное сообщение появится.
  14. Сообщения в MPI передаются как пакеты, содержащие данные вместе с информацией их описывающей. Наличие информации, например, о реальном размере передаваемых данных может оказаться весьма полезной в некоторых случаях. При отправке сообщения мы должны указать следующие параметры : Собственно, массив данных, которые мы хотим передать. Размер массива передаваемых данных – система выполнения должна точно знать, сколько данных мы передаем. О типах данных ниже. Процесс-получатель сообщения – при парных обменах вполне естественный параметр. Тег данных – это специальная метка, позволяющая в программе отличать одни данные от других. Тег задается программистом произвольно. При приеме сообщения также необходимо указывать буфер данных, в котором данные принятого сообщения будут сохранены, размер этого буфера, тег принимаемых данных и процесс-отправитель сообщения. При вызове команды получения данных система будет искать сообщение с запрошенными тегом и процессом-отправителем. Если будет найдено сообщение с указанными значениями, оно будет принято и сохранено. Иначе система будет ждать, пока нужное сообщение появится.
  15. Функция MPI_Send производит отпарвку сообщения из буфера buf процессу с рангом dest в коммуникаторе comm . Далее будут рассмотрены различные режимы работы MPI_Send . Необходимо отметить, что по усмотрению системы выполнения MPI , функция MPI_Send может сохранять передаваемые данные в буфер и возвращать управление в программу, а может блокировать ее выполнение до появления запроса на прием сообщения, посылаемого функцией MPI_Recv .
  16. MPI_Recv выполняет прием сообщения от процесса source . Выполнение программы будет заблокировано до того момента, как собщение будет полностью сохранено в буфере buf . В параметре status будет сохранен статус сообщения : его тег, его полный размер (он может быть и больше заданного параметром MPI_Recv ) и процесс-отправитель.
  17. В таблице приведены типы данных MPI для языков C и Fortran. MPI содержит специальные функции, позволяющие конструировать собственные типы данных – об этом в MPI Advanced techniques .
  18. MS-MPI входит в состав HPC Pack 2008 . Также скачать SDK можно со страницы http://go.microsoft.com/fwlink/?linkID= 127031 Допустим, что SDK установлен в папку is C:Program FilesMicrosoft HPC Pack 2008 SDK. При выборе платформы Win32 необходимо указать директории для подключаемых и библиотечных файлов. Для этого необходимо в Visual Studio выбрать в меню Обратите внимание, что эти действия необходимо проделать для каждого типа проекта: Win32 Debug, Win32 Release, x64 Debug, и x64 Release.
  19. Изменим алгоритм изменения контрастности изображения для работы на кластере. Необходимо чтобы MPI приложение выполняло следующий алгоритм: 1. Распределение частей матрицы изображения равномерно между вычислительными узлами 2. Каждый узел выполняет преобразования над полученной частью матрицы 3. Результирующую матрица формировалась из данных полученных от каждого узла. Для начала создадим приложение в котором главный узел рассылает по вычислительным узлам части матрицы, а потом они Посылают эти части матирицы на главный узел, который собирает их в одну матрицу. Проверку исходной матрицы и полученной будет производить с помощью программы WinDiff
  20. Для всех узлов кроме первого вычисление контрастности пикселей начинается со первой строки матрицы и заканчивается предпоследней ( rows-1 ) строкой матрицы изображения. Первый узел начинает вычисления со 2-й строки т.к. для него нет 0-й (пересылаемой). Тоже самое можно сказать и о последнем узле, вычисления которого останавливаются на предпоследней строке.
  21. Как вы помните, для реализации алгоритма изменения контрастности, для всех узлов кроме первого и последнего требуются дополнительные строки.
  22. Обратите внимание на окончание цикла for , где отображается количество измененных пикселей, и если нет измененных пикселей, вычисления останавливаются: } } cout &lt;&lt; &amp;quot; (diffs until convergence: &amp;quot; &lt;&lt; diffs &lt;&lt; &amp;quot;)&amp;quot; &lt;&lt; endl; converged = (diffs == 0); В последовательной версии алгоритма переменная diffs объявлена как локальная. В связи с тем, что вычисление контрастности происходит на множестве узлов, переменная diffs должна быть объявлена как глобальная , таким образом чтобы узлы могли передавать значения локальной переменной diffs главному узлу. Главный узел вычисляет сумму, и если она равна 0, то вычисления прекращаются, в ином случае отправляет новое значение вычислительным узлам