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

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



Advertisements
Похожие презентации
OpenMP. Различие между тредами и процессами ПроцессыТреды.
Advertisements

Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 3 Томский политехнический.
Многопоточное программирование в OpenMP Киреев Сергей ИВМиМГ.
Вложенные параллельные области Если переменная среды OMP_NESTED имеет значение true, то любая нить параллельной области может породить новую параллельную.
Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Томский политехнический университет.
Интернет Университет Суперкомпьютерных технологий Система поддержки выполнения OpenMP- программ. Переменные окружения, управляющие выполнением OpenMP-
OpenMPOpenMPРазличие между тредами и процессами ПроцессыТреды.
Разработка параллельных приложений для многоядерных систем С.В. Ковальчук НИИ Наукоемких компьютерных технологий, СПбГУ ИТМО.
Основы OpenMP Nikita Panov
МГУ им. М.В. Ломоносова, Москва, 21 октября 2011г. КОНСОРЦИУМ УНИВЕРСИТЕТОВ РОССИИ Курс: «Технология параллельного программирования OpenMP» Лабораторная.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 16 Методы разработки параллельных программ для многопроцессорных систем с общей.
POSIX Threads & OpenMP Общая память Сергей Петрович Нечаев, Сибирский Суперкомпьютерный центр.
Технология программирования OpenMP Антонов Александр Сергеевич, к.ф.-м.н., с.н.с. лаборатории Параллельных информационных технологий НИВЦ МГУ.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 15 Методы разработки параллельных программ для многопроцессорных систем с общей.
Нижегородский государственный университет им. Н.И.Лобачевского Факультет Вычислительной математики и кибернетики Введение в OpenMP Гергель В.П., Сысоев.
Интернет Университет Суперкомпьютерных технологий Отладка эффективности OpenMP- программ. Учебный курс Параллельное программирование с OpenMP Бахтин В.А.,
Е.Ю. Алексеева Механико-математический факультет Южно-Уральского государственного университета.
Е.Ю. Алексеева Механико-математический факультет Южно-Уральского государственного университета.
Отладка эффективности OpenMP- программ. Параллельное программирование с OpenMP Бахтин Владимир Александрович Ассистент кафедры системного программированния.
Технология программирования OpenMP Антонов Александр Сергеевич, к.ф.-м.н., с.н.с. лаборатории Параллельных информационных технологий НИВЦ МГУ 1.
Транксрипт:

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

Функция для работы с системным таймером Функция omp_get_wtime() возвращает в вызвавшей нити астрономическое время в секундах (вещественное число двойной точности), прошедшее с некоторого момента в прошлом. Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 2 double start_time, end_time; int a[30]; omp_set_num_threads(2); start_time = omp_get_wtime(); #pragma omp parallel { #pragma omp for for(int i = 0; i

Модель памяти OpenMP Параллельное программирование с использованием технологии OpenMP Аксёнов С.В Нить 001 Нить 001 Нить

Использование статических переменных. Директива threadprivate() Директива threadprivate() может позволить сделать локальные копии для статических переменных языка Си, которые по умолчанию являются общими. Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 4 int n; #pragma omp threadprivate(n) void main() { n=5; int num; omp_set_num_threads(2); #pragma omp parallel private (num) { num=omp_get_thread_num(); cout

Директива copyin() Применение опции copyin позволяет инициализировать локальные копии переменной n начальным значением нити-мастера. Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 5 int n; #pragma omp threadprivate(n) void main() { n=1; int num; omp_set_num_threads(2); #pragma omp parallel private (num) copyin(n) { num=omp_get_thread_num(); cout

Вложенные циклы Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 6 Параллельные области Функция omp_set_nested(int) разрешает или запрещает вложенный параллелизм. Аргумент: 0 - выключение вложенного параллелизма, 1 – включение вложенного параллелизма

Пример: Вложенные циклы Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 7 int n; omp_set_nested(1); omp_set_num_threads(3); #pragma omp parallel private(n) { n=omp_get_thread_num(); #pragma omp parallel { printf("Часть1, Поток %d - %d\n", n, omp_get_thread_num()); } omp_set_nested(0); #pragma omp parallel private(n) { n=omp_get_thread_num(); #pragma omp parallel { printf("Часть 2, Поток %d - %d\n", n, omp_get_thread_num()); }

Диспетчеризация циклов Ч.1 Опция schedule(type[, chunk]) задаёт, каким образом итерации цикла распределяются между нитями; Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 8 В опции schedule параметр type задаёт следующий тип распределения ите- раций: static – блочно-циклическое распределение итераций цикла; размер блока – chunk. Первый блок из chunk итераций выполняет нулевая нить, второй блок следующая и т.д. до последней нити, затем рас- пределение снова начинается с нулевой нити. dynamic – динамическое распределение итераций с фиксированным размером блока: сначала каждая нить получает chunk итераций (по умолчанию chunk=1), та нить, которая заканчивает выполнение своей порции итераций, получает первую свободную порцию из chunk ите- раций.

Диспетчеризация циклов Ч.2 Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 9 guided – динамическое распределение итераций, при котором размер порции уменьшается с некоторого начального значения до величины chunk (по умолчанию chunk=1) пропорционально количеству ещё не распределённых итераций, делённому на количество нитей, выпол- няющих цикл. runtime – способ распределения итераций выбирается во время работы программы по значению переменной среды OMP_SCHEDULE. Параметр chunk при этом не задаётся.

Пример: Диспетчеризация циклов Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 10 omp_set_num_threads(3); int A[100], B[100], C[100], i, n; for (i=0; i

Пример: распределение итераций по циклам Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 11

Распределение итераций по нитям для static(6) Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 12

Распределение итераций по нитям для dynamic(6) Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 13

Распределение итераций по нитям для guided(6) Параллельное программирование с использованием технологии OpenMP Аксёнов С.В. 14