Методология императивного параллельног
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