Методология императивного параллельног

Download Report

Transcript Методология императивного параллельног

Методология императивного
параллельного
программирования
ЛЕКЦИЯ №1
Калинина А.П.
1
СОДЕРЖАНИЕ
1.
2.
Введение
Методология императивного параллельного
программирования: происхождение, теория и эволюция
3.
Методы и концепции. Синтаксис и семантика
4.
Языки параллельного программирования
5.
Класс задач
6.
Ускорение параллельной программы
7.
Закон Амдала
2
1. Введение
«СИСТЕМНЫЙ» ПОДХОД
3
1. Введение
Практическое параллельное программирование в
системах с общей памятью
Методология: императивное параллельное
программирование
Архитектурная платформа: SMP – система (система
с общей памятью)
Операционная платформа: Windows
Язык и инструменты среды программирования:
OpenMP (Intel C++), инструменты Intel (Thread
Checker, Thread Profiler, VTune Performance
Analyzer)
4
1. Введение
Определение методологии
Методология программирования – совокупность методов,
применяемых в жизненном цикле программного обеспечения и
объединенных общим философским подходом
«Собрались однажды звери в лесу, чтобы строить мост через реку. Когда
все обсудили, медведь спрашивает: вопросы есть? Осел: «А как будем
строить – вдоль или поперек реки?»
Анекдот о необходимости определяющих подходов [1]

Методология как концентрация практического опыта

Алгоритмическое происхождение некоторых методологий

Методологии как результат отображения структур
5
1. Введение
«СИСТЕМНЫЙ ПОДХОД»: литература
1.
2.
3.
И. Одинцов Профессиональное
программирование. Системный подход. –
«БХВ-Петербург» - 2004. – 610 с.
Джин Бэкон, Тим Харрис Операционные
системы. Параллельные и распределенные
системы. – bhv «Питер» - 2004 – 799 с.
http://www.iteducation.ru/2006/reports/Kalinina.htm
6
1.Введение
«СИСТЕМНЫЙ» ПОДХОД:
условия эффективного обучения

Теория

Практические занятия

Применение инструментов, которые
будут диагностировать работу
компьютера на низшем уровне
7
2. Методология императивного
параллельного программирования:
происхождение, теория и эволюция
2.1. Классификация по ядрам методологий
2.2. Некоторые методологии, поддерживающие параллелелизм
(реализационная специфика)
2.3. Определение методологии императивного параллельного
программирования
2.4. Простые примеры на основе OpenMP
(http://www.openmp.org/drupal/mp-documents/spec25.pdf )
2.5. Происхождение, теория, эволюция
8
2.1. Классификация по ядрам
методологий

Методология императивного программирования

Методология объектно-ориентированного
программирования

Методология функционального программирования

Методология логического программирования

Методология программирования в ограничениях
9
2.2.Некоторые методологии,
поддерживающие параллелелизм
(реализационная специфика)



Методология императивного параллельного
программирования
Методология логического параллельного
программирования
Методология функционального
программирования
10
2.3. Определение методологии
императивного параллельного
программирования
Методология императивного параллельного
программирования –
подход, в котором предлагается использование
явных конструкций для параллельного
исполнения выбранных фрагментов программ.
11
2.4. Простые примеры на основе
OpenMP(1)
Конструкция «параллельные секции»: параллельно,
одновременно выполняются 2 цикла
#pragma omp parallel sections
{
#pragma omp section
for (i=0;i<N; i++ ) sum_a = sum_a +
pow(sin(x),double(i));
#pragma omp section
for (j=0;j<N; j++ ) sum_b = sum_b +
pow(cos(x),double(j));
}
12
2.4. Простые примеры на основе
OpenMP(2)
Параллельно выполняется каждая половина итераций каждого
цикла;
в конце каждого из них получается результирующее значение
суммы (“reduction”), как сумма результатов каждого из
параллельных вычислений
#pragma omp parallel for reduction(+:sum_a)
for (i=0;i<N; i++ ) sum_a = sum_a + pow(sin(x),double(i));
#pragma omp parallel for reduction(+:sum_b)
for (j=0;j<N; j++ ) sum_b = sum_b + pow(cos(x),double(j));
13
2.5. Происхождение, теория, эволюция

Вычислительные задачи

Создание аппаратных многопроцессорных архитектур



Появление достаточно сложных программ, требующих
поддержки явного параллелелизма (например, операционных
систем)
Считается, что параллельное программирование возникло в
1962 году с изобретением каналов – независимых
аппаратных контроллеров, позволяющих центральному
процессору выполнять новую прикладную программу
одновременно с операциями ввода – вывода других программ
Первоначально с параллельным программированием имели
дело лишь разработчики операционных систем.
14
2.5. Происхождение, теория, эволюция..
Пример многопроцессорной
архитектуры с общей памятью(1)
15
2.5. Происхождение, теория, эволюция..
Пример многоядерной
архитектуры с общей памятью(2)
Intel® Core™
Duo Processor
FP Unit
FP Unit
EXE Core
EXE Core
L1 Cache
L1 Cache
L2 Cache
System Bus
(667MHz, 5333MB/s)
16
2.5. Происхождение, теория, эволюция..
Распределение процессов между модулями
операционной системы: пример
17
2.5. Происхождение, теория, эволюция...
Параллельный язык программирования с
поддержкой пользовательских потоков как потоков
ядра
18
3. Методы и концепции. Синтаксис и
семантика
3.1. Методы и концепции
3.2. Модель вычислений параллельного
программирования в контексте модели
императивного программирования
3.3. Уровни параллелелизма
3.4. Взаимодействие параллельных процессов
19
3.1. Методы и концепции

Метод синхронизации исполняемого кода
заключается в использовании специальных
атомических операций для осуществления
взаимодействия между одновременно
исполняемыми фрагментами кода.

Метод поддерживается концепцией примитивов
синхронизации
20
3. Методы и концепции. Синтаксис и семантика
3.2. Модель вычислений параллельного
программирования в контексте модели императивного
программирования


Имеется несколько вычислителей, которые характеризуются
наличием общих элементов состояния
Если на шаге вычислений с некоторым номером элемент
состояния одного вычислителя принимал данное значение, то для
любого другого вычислителя на шаге вычисления с тем же
номером соответствующий элемент состояния также должен
принимать данное значение

Прямым аналогом оператора в данной методологии является
процесс

Основное отличие этой методологии от императивной в том, что
процессы могут выполняться параллельно.


Параллельная методология тесно привязана к платформе, на
которой она реализуется
Параллелизм может быть реализован как аппаратно на
централизованной архитектуре, так и на распределенной
21
3. Методы и концепции. Синтаксис и семантика
3.3. Уровни параллелелизма
В зависимости от уровня дробления выделяют следующие
уровни параллелелизма:

Параллелелизм на уровне микрокоманд

Параллелелизм на уровне операторов (кроме циклов)

Параллелелизм на уровне циклов и итераций

Параллелелизм на уровне подпрограмм, процедур и функций

Параллелелизм на уровне потоков управления

Параллелелизм на уровне процессов

Параллелелизм на уровне приложений
22
3. Методы и концепции. Синтаксис и семантика
3.4. Взаимодействие параллельных процессов

Семантическое представление взаимодействия параллельных
процессов:
работа сети некоторых устройств, соединенных каналами, по
которым текут данные

Каждый вычислитель производит типичные для его
вычислительной модели операции:
например, императивный вычислитель будет переходить из
состояния в состояние

Когда процесс встречает инструкцию «принять значение из
канала», он входит в состояние ожидания, когда канал пуст
Как только в канале появляется значение, процесс его
считывает и продолжает работу.
23
4. Языки параллельного программирования
4.1. Программирование на параллельном языке
программирования
4.2. Программирование на широко
распространенном языке программирования,
который расширен распараллеливающими
конструкциями
4.3. Программирование с использованием
дополнительных указаний компилятору
4.4. Программирование на широко
распространенном языке программирования с
использованием коммуникационных библиотек
4.5. Средства автоматического распараллеливания
24
последовательных программ такими
инструментами, как компиляторы
4. Языки параллельного программирования
4.1. Программирование на параллельном языке
программирования
Такие языки могут быть:


Универсальными (например, Ada)
Для конкретных типов компьютера, позволяющем
эффективно транслировать программы на
параллельном языке именно в эту архитектуру
(например, язык Occam изначально
разрабатывался для транспьютеров)
25
4. Языки параллельного программирования
4.2. Программирование на широко распространенном
языке программирования, который расширен
распараллеливающими конструкциями


например C, C++, Pascal
распараллеливающие конструкции на
уровне языка программирования
26
4. Языки параллельного программирования
4.3. Программирование с использованием
дополнительных указаний компилятору

на уровне языка прагм

например, по стандарту OpenMP
27
4. Языки параллельного программирования
4.4. Программирование на широко
распространенном языке программирования с
использованием коммуникационных
библиотек


использование коммуникационных библиотек и
интерфейса для организации межпроцессного
взаимодействия
В этом случае конструкции параллелелизма
вынесены с языкового уровня на уровень
операционной системы
28
4. Языки параллельного программирования
языки программирования, содержащие явные
конструкции параллельного исполнения

1950
1960

Algol-68(1968)

1970 Concurrent Pascal(1972)

Modula-2(1978) GSP (1978)

1980 Edison (1980) Ada (1979, 1983)

Occam(1982)

Concurrent Prolog(1983)

Linda(1985)

Oblig(1993)

29
5. Класс задач



Данная методология может очень эффективно
применяться для обработки больших однородных
массивов данных
Такие массивы часто встречаются в реализации
вычислительных и статистических методов
Кроме того, методология параллельного
программирования успешно применяется при
моделировании, в операционных системах и
системах реального времени
30
6. Ускорение параллельной программы
Ускорением параллельной программы
называется
отношение времени работы
последовательной, полностью
оптимизированной программы,
к времени работы параллельной программы
31
7. Закон Амдала





T(par) = T(for par)/N
T(total) = T(seq) + T(for
par)
Закон Амдала для оценки
ускорения параллельной
программы
A = T(total)/( T(seq) +
T(for par)/N)
Реальное ускорение может
быть меньше (более
вероятно) и больше
оценочного
32
Задание
1. Определить ускорение параллельной программы для
примеров со слайдов 12, 13, открыв соответствующие
проекты
Генерацию параллельного кода можно включать –
отключать с помощью вкладки
Properties/C/C++/Language/Directive OpenMP
2. Убедиться в правильной работе программы с помощью
Tread Checker, для этого установив число итераций
циклов N = 30 (Tread Checker резко замедляет время
работы программы)
3. Убедиться в параллельной работе потоков с помощью
Tread Profiler for OpenMP
33
Литература
1.
И. Одинцов Профессиональное
программирование. Системный подход. –
«БХВ-Петербург» - 2004. – 610 с.
2. Джин Бэкон, Тим Харрис Операционные
системы. Параллельные и распределенные
системы. – bhv «Питер» - 2004 – 799 с.
34