Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Томский политехнический университет.

Презентация:



Advertisements
Похожие презентации
Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 2 Томский политехнический.
Advertisements

Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 3 Томский политехнический.
Многопоточное программирование в OpenMP Киреев Сергей ИВМиМГ.
OpenMP. Различие между тредами и процессами ПроцессыТреды.
Разработка параллельных приложений для многоядерных систем С.В. Ковальчук НИИ Наукоемких компьютерных технологий, СПбГУ ИТМО.
OpenMPOpenMPРазличие между тредами и процессами ПроцессыТреды.
Интернет Университет Суперкомпьютерных технологий Основные понятия Учебный курс Параллельное программирование с OpenMP Бахтин В.А., кандидат физ.-мат.
Вычислительная система (ВС) - это взаимосвязанная совокупность аппаратных средств вычислительной техники и программного обеспечения, предназначенная для.
Вложенные параллельные области Если переменная среды OMP_NESTED имеет значение true, то любая нить параллельной области может породить новую параллельную.
Интернет Университет Суперкомпьютерных технологий Основные понятия Учебный курс Параллельное программирование с OpenMP Бахтин В.А., кандидат физ.-мат.
Интернет Университет Суперкомпьютерных технологий Конструкции для синхронизации нитей Учебный курс Параллельное программирование с OpenMP Бахтин В.А.,
Программирование многоядерных архитектур (слайды для лекции 2013/04/20) Киреев С.Е., Маркова В.П., Остапкевич М.Б., Перепелкин В.А. МО ВВС ИВМиМГ СО РАН.
Интернет Университет Суперкомпьютерных технологий Система поддержки выполнения OpenMP- программ. Переменные окружения, управляющие выполнением OpenMP-
Архитектура ЭВМ (лекция 7) проф. Петрова И.Ю. Курс Информатики.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 15 Методы разработки параллельных программ для многопроцессорных систем с общей.
Новая технология программирования с применением процедур с повторным входом. Разработанa alfa-версия транслятора C++, реализующего технологию Продукт Традиционное.
Закон Мура. Закон Амдаля Ускорение процесса вычислений при использовании N процессоров ограничивается величиной 1 k <= p+ (1-p) N где p есть доля последовательных.
Основы OpenMP Nikita Panov
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 16 Методы разработки параллельных программ для многопроцессорных систем с общей.
POSIX Threads & OpenMP Общая память Сергей Петрович Нечаев, Сибирский Суперкомпьютерный центр.
Транксрипт:

Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Томский политехнический университет

Параллельные вычисления Параллельные вычисления - это процессы обработки данных, в которых одновременно могут выполняться несколько операций компьютерной системы Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 2

Цели параллельных вычислений Сокращение времени исполнения Повышение конфигурируемости Возможно лучшая отказоустойчивость Научный интерес Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 3

Достижение параллелизма Достижение параллелизма возможно только при выполнимости следующих требований: независимость функционирования отдельных устройств ЭВМ (устройства ввода-вывода, обрабатывающие процессоры и устройства памяти), избыточность элементов вычислительной системы использование специализированных устройств (например, отдельные процессоры для целочисленной и вещественной арифметики, устройства многоуровневой памяти), дублирование устройств ЭВМ (например, использование нескольких однотипных обрабатывающих процессоров или нескольких устройств оперативной памяти) Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 4

Достижение параллелизма Возможные режимы выполнения независимых частей программы: многозадачный режим (режим разделения времени), при котором для выполнения нескольких процессов используется единственный процессор, параллельное выполнение, когда в один и тот же момент времени может выполняться несколько команд обработки данных, распределенные вычисления, при которых для параллельной обработки данных используется несколько обрабатывающих устройств, достаточно удаленных друг от друга, а передача данных по линиям связи приводит к существенным временным задержкам. Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 5

Классификация вычислительных систем Систематика Флинна … Классификация по способам взаимодействия последовательностей (потоков) выполняемых команд и обрабатываемых данных: SISD (одиночный поток команд одиночный поток данных) SIMD (одиночный поток команд множественный поток данных) MISD (множественный поток команд одиночный поток данных) MIMD (множественный поток команд множественный поток данных) Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 6

Структура ЭВМ с индивидуальной памятью Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 7

Структура ЭВМ с разделяемой памятью Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 8

OpenMP Набор директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с разделяемой памятью на языках С, С++, Fortran Разработкой стандарта занимается некоммерческая организация OpenMP ARB в которую вошли представители крупнейших компаний – разработчиков SMP-архитектур Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 9

Модель параллельной программы Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. OpenMP реализует параллельные вычисления с помощью многопоточности, в которой «главный» поток создает набор подчиненных потоков и задача распределяется между ними. Предполагается, что потоки выполняются параллельно на машине с несколькими процессорами (количество процессоров не обязательно должно быть больше или равно числу потоков) 10

Пример простой программы Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. #include void main() { omp_set_num_threads( 2 ); #pragma omp parallel { cout

Разделение работы в параллельном регионе void main() { const int n = 100; int a[n]; omp_set_num_threads( 2 ); #pragma omp parallel { #pragma omp for for (int i=0; i

Изменение числа нитей void main() { omp_set_num_threads(2); #pragma omp parallel num_threads(3) { cout

Директива single void main() { omp_set_num_threads(3); #pragma omp parallel { cout

Директива master void mode() { if(omp_in_parallel()) cout

Разделяемые и локальные переменные Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. В OpenMP переменные в параллельных областях программы разделяются на два основных класса: Shared Разделяемые (общие); все нити видят одну и ту же переменную; Private Локальные; каждая нить видит свой экземпляр данной переменной. По умолчанию переменные – разделяемые 16

Использование клаузы private int f(int a) { return a*a-10*a-50; } void main() { const int n = 100; int a[n], t; omp_set_num_threads( 2 ); #pragma omp parallel { #pragma omp for private (t) for (int i=0; i

Пример: локальные переменные omp_set_num_threads( 3 ); int i = 1; cout

Пример void main() { int mId, nthreads; omp_set_num_threads( 2 ); #pragma omp parallel private(mId, nthreads) { mId = omp_get_thread_num(); nthreads=omp_get_num_threads(); cout

Использование опции firstprivate() omp_set_num_threads( 2); int n=10; cout

Использование опции copyprivate() omp_set_num_threads(5); int n; #pragma omp parallel private(n) { n=omp_get_thread_num(); cout

Пример: разделяемые переменные omp_set_num_threads( 3 ); int i = 1; cout

Опция reduction Опция reduction(оператор:список) задаёт оператор и список общих переменных; для каждой переменной создаются локальные копии в каждой нити; локальные копии инициализируются соответственно типу оператора над локальными копиями переменных после выполнения всех операторов параллельной области выполняется заданный оператор Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. Список возможных операторов: +, *, -, &, |, &&, || 23

Пример void main() { omp_set_num_threads(2); int count = 0; #pragma omp parallel reduction (+: count) { count++; cout

Вычисление числа π Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 4.0 (1+x 2 ) dx = 0 1 F(x i ) x i = 0 N Мы можем аппроксимировать интеграл как сумму прямоугольников: Где каждый прямоугольник имеет ширину x и высоту F(x i ) в середине интервала F(x) = 4.0/(1+x 2 ) X

Вычисление числа π (последовательная реализация Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. #include void main () { int n =100000, i; double pi, h, sum, x; h = 1.0 / (double) n; sum = 0.0; for (i = 1; i

Вычисление числа π (реализация с помощью OpenMP) Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. #include void main () { int n =100000, i; double pi, h, sum, x; h = 1.0 / (double) n; sum = 0.0; #pragma omp parallel for reduction(+:sum) private(x) for (i = 1; i