Презентация Практические рекомендации по распараллеливанию с помощью OpenMP и измерению ускорения. Ошибки при многопоточном программировании онлайн
На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Практические рекомендации по распараллеливанию с помощью OpenMP и измерению ускорения. Ошибки при многопоточном программировании абсолютно бесплатно. Урок-презентация на эту тему содержит всего 70 слайдов. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » Практические рекомендации по распараллеливанию с помощью OpenMP и измерению ускорения. Ошибки при многопоточном программировании
Оцените!
Оцените презентацию от 1 до 5 баллов!
- Тип файла:ppt / pptx (powerpoint)
- Всего слайдов:70 слайдов
- Для класса:1,2,3,4,5,6,7,8,9,10,11
- Размер файла:1.09 MB
- Просмотров:48
- Скачиваний:0
- Автор:неизвестен
Слайды и текст к этой презентации:
№3 слайд
![. Практические рекомендации](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img2.jpg)
Содержание слайда: 1. Практические рекомендации по распараллеливанию с помощью OpenMP и измерению ускорения.
1.1. Время вычислений в параллельном регионе должно быть больше, чем время, затраченное на создание параллельного региона
1.2. При входе в первый параллельный регион «накладные расходы» намного больше, чем при входах в следующие параллельные регионы
№4 слайд
![Потоки в современных Windows](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img3.jpg)
Содержание слайда: Потоки в современных Windows
Процесс представляет выполняющийся экземпляр программы. Он имеет собственное адресное пространство, где содержаться его код и данные.
Процесс должен содержать минимум как один поток, так как именно он, а не процесс, является единицей планирования (данная операционная система относится к системам разделения времени, т.е. каждой единице предоставляется квант процессорного времени).
Процесс может создавать несколько потоков, выполняемых в его адресном пространстве.
№7 слайд
![Неизбежные накладные расходы](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img6.jpg)
Содержание слайда: Неизбежные «накладные расходы» в многопоточной программе с несколькими параллельными регионами
Создание потоков – самые большие «накладные расходы»
На «остановлен» - «на процессоре» - «накладные расходы» намного меньше, чем на создание (вход – выход в параллельную секцию)
На «ожидание» - «на процессоре» «накладные расходы» намного меньше, чем на «остановлен» - «на процессоре» (критическая секция – зато чаще встречается, чем вход в параллельную секцию)
№9 слайд
![. . При входе в первый](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img8.jpg)
Содержание слайда: 1.2. При входе в первый параллельный регион «накладные расходы» намного больше, чем при входах в следующие параллельные регионы
Либо полное время параллельных вычислений должно быть больше кванта операционной системы (для систем разделения времени, в том числе Windows)
Либо перед тестируемым участком поставить директиву по созданию пустого параллельного региона
– большая часть «накладных расходов» будет «локализована» в ней
- условие выбора величины кванта – чтобы работа процессов «приносила больше пользы», чем «накладные расходы» на их инициирование)
№10 слайд
![Тестируемый код проект time](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img9.jpg)
Содержание слайда: Тестируемый код – проект time_parallel – ускорение как функция полного времени работы программы – последовательный код
start = rdtsc();
for (j=1; j <=M; j++)
for (i = 1; i < treeData.N; i++)
if (treeData.Path[i] > limit)
{
Weight_PathMin = treeData.max+limit;
if (Weight_PathMin > limit)
{
replace_number = treeData.Weight[i];
}
}
stop = rdtsc()-start;
№11 слайд
![Тестируемый код проект time](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img10.jpg)
Содержание слайда: Тестируемый код – проект time_parallel – ускорение как функция полного времени работы программы – параллельный код (участок в main)
start = rdtsc();
for (j = 1; j <=M; j++)
{ omp_set_num_threads (num_threads);
#pragma omp parallel private(id)
{ id = omp_get_thread_num();
Path_Min[id] = Search_minimum (id, treeData.max,
treeData.Path, treeData.N, num_threads);
}
MinimPath = treeData.max;
for (i = 0; i < num_threads; i++)
if(Path_Min[i] < MinimPath) MinimPath = Path_Min[i];
}
stop = rdtsc()-start;
№13 слайд
![Требования на выбор](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img12.jpg)
Содержание слайда: Требования на выбор предельных значений переменных внешнего и внутреннего цикла
1. Внутренний цикл: treeData.N определяется из условия:
t(внутреннего цикла)>> t(входа в многопоточный регион)
2.1. Внешний цикл: при фиксированном treeData.N должно быть такое М, что
t(полное) или > t(кванта)
2.2. Либо M любое, но перед тестируемым циклом стоит директива по созданию параллельного региона
№14 слайд
![Задание . Проект time paral.](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img13.jpg)
Содержание слайда: Задание 1. Проект time_paral. Зависимость ускорения от M
1. Для запуска последовательного варианта аргументы в командной строке:
1) 5 10 10000 1 3
2) 5 10 10000 2 3
3) 5 10 10000 10 3
4) 5 10 10000 100 3
5) 5 10 10000 1000 3
6) 5 10 10000 100000 3
1. Для запуска параллельного варианта аргументы в командной строке:
1) 5 10 10000 1 5 2
2) 5 10 10000 2 5 2
3) 5 10 10000 10 5 2
4) 5 10 10000 100 5 2
5) 5 10 10000 1000 5 2
6) 5 10 10000 100000 5 2
№15 слайд
![Задание . Проект time paral.](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img14.jpg)
Содержание слайда: Задание 2. Проект time_paral. Зависимость ускорения от M
Демонстрация того, что все «накладные расходы» сосредоточены в первом создаваемом многопоточном регионе (в этом варианте – вход в три одинаковых параллельных региона):
Запуск с аргументами командной строки
5 10 10000 1 11 2
№16 слайд
![. Ошибки при многопоточном](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img15.jpg)
Содержание слайда: 2. Ошибки при многопоточном программировании
1. Конфликты «запись - запись» - два потока пишут в одну переменную
(«а ля» два рецензента правят один экземпляр статьи и друг друга одновременно – кто успеет быстрее «гонки данных»)
2. Тупики или «зависания» или «lock» (один поток захватил ресурс и не отдает другим – программа может висеть бесконечно)
Живой
Мертвый
3. Избыточное применение параллельных конструкций – меньше ускорение, хотя программа работает правильно
№19 слайд
![. . Курс Гергеля Обзор](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img18.jpg)
Содержание слайда: 3.1. Курс Гергеля
Обзор методов многопоточного программирования для простейших алгоритмов
умножение вектора на вектор
матрицы на матрицу
решение систем линейных уравнений
сортировки
Обзор основных конструкций OpenMP
Особенность курса
в основном обзорный характер, «охват материала»
акцент – на рассмотрении алгоритмов
№20 слайд
![. . Материалы тренингов Intel](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img19.jpg)
Содержание слайда: 3.2. Материалы тренингов Intel
Преобладающая особенность – все показывается на одной задаче
Параллельный алгоритм
Параллельные конструкции OpenMP
Методика создания многопоточного приложения
Интерфейс и возможности отладчиков
Акцент на процесс создания и технологию параллельного программирования
№26 слайд
![Процессы и потоки В](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img25.jpg)
Содержание слайда: Процессы и потоки
В современных операционных системах процесс представляет выполняющийся экземпляр программы
Процесс – единица работы, заявка на потребление системных ресурсов
Процесс – исполнение последовательности действий
В начале выполнения процесс представляет собой один поток
Потоки могут создавать новые потоки в пределах одного процесса
№27 слайд
![Потоки плюсы и минусы Плюсы](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img26.jpg)
Содержание слайда: Потоки – «плюсы» и «минусы»
«Плюсы»
Позволяют повысить производительность и полнее использовать системные ресурсы
Даже в однопроцессорной системе – для «скрытия» латентности и повышения производительности
Взаимодействие через разделяемую (общую) память более эффективно
«Минусы»
Возрастает степень сложности
Сложность в отладке приложений
(«гонки данных» (конфликты «запись-запись» и т. д.), тупики («зависание» потоков) )
№28 слайд
![Генерация простых чисел bool](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img27.jpg)
Содержание слайда: Генерация простых чисел
bool TestForPrime(int val)
{ // let’s start checking from 3
int limit, factor = 3;
limit = (long)(sqrtf((float)val)+0.5f);
while( (factor <= limit) && (val % factor) )
factor ++;
return (factor > limit);
}
void FindPrimes(int start, int end)
{
int range = end - start + 1;
for( int i = start; i <= end; i += 2 )
{
if( TestForPrime(i) )
globalPrimes[gPrimesFound++] = i;
ShowProgress(i, range);
}
}
№29 слайд
![Задание . Выполнить запуски](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img28.jpg)
Содержание слайда: Задание 1.
Выполнить запуски последовательной версии первоначального кода (проект Simple_number)
Установить однопоточный режим работы (Visual Studio, Project properties -> С++ -> code generation -> Single Threaded Debug DLL)
Выполнить компиляцию с помощью Intel C++
Выполнить несколько запусков с различными диапазонами поиска простых чисел (start, end)
№30 слайд
![Методика разработки Анализ](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img29.jpg)
Содержание слайда: Методика разработки
Анализ
Определить участок кода с максимальной долей вычислений
Проектирование (включить многопоточность)
Определить, каким образом может быть использована многопоточность
Тестирование правильности работы
Выявить источники ошибок, связанных с потоками
Измерение производительности
Достигнуть максимальной производительности работы многопоточного приложения
№37 слайд
![Задание Выполните запуск с](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img36.jpg)
Содержание слайда: Задание 2
Выполните запуск с параметрами ‘1 5000000’ (границы диапазона поиска простых чисел)
Цель запуска - получить значение времени, с которым будет сравниваться время работы многопоточного приложения
Мы прошли первый этап цикла разработки:
Анализ последовательного кода с помощью VTune
Выявление функций с максимальным временем работы – «узких мест»
№38 слайд
![Метод проектирования Фостера](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img37.jpg)
Содержание слайда: Метод проектирования Фостера
Необходимо выполнить 4 шага:
Разбить задачу на максимальное число подзадач
Установить связи «данные - вычисления»
«Агломерация»:
составить задания, которые можно выполнять параллельно
«Распределение» - распределить задания между процессорами/потоками
№39 слайд
![Проектирование многопоточной](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img38.jpg)
Содержание слайда: Проектирование многопоточной программы
«Дробление»
Разбить исходную задачу на подзадачи
«Связи»
Определить типы и количество связей между подзадачами
«Агломерация»
Составить задания – сгруппировать «мелкие» подзадачи в «большие» группы – по принципу минимума связей между группами
«Распределение»
Распределить задания между процессорами/потоками
№40 слайд
![Модели параллельного](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img39.jpg)
Содержание слайда: Модели параллельного программирования
Функциональная декомпозиция
Параллельное выполнение разных подзадач
Разделение на различные подзадачи, но обработка общих данных каждой подзадачей
Выделение независимых подзадач для распределения между процессорами/потоками
Декомпозиция по данным
Выделение операций, общих для различных данных
Разбиение данных на блоки, которые можно обрабатывать независимо
№42 слайд
![Аналогии для функциональной](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img41.jpg)
Содержание слайда: Аналогии для функциональной декомпозиции и декомпозиции по данным
Независимые этапы вычислений
Функциональная декомпозиция
Задача потока связана со «стадией вычислений»
Аналогия с конвейером сборки автомобиля – каждый рабочий(поток) параллельно с другими собирает все детали одного (своего) типа – затем общая сборка автомобиля
Декомпозиция по данным
Потоковый процесс выполняет все стадии для своего блока данных
Каждый рабочий собирает свой автомобиль
№56 слайд
![Задание Модифицируйте версию](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img55.jpg)
Содержание слайда: Задание 5
Модифицируйте версию кода с OpenMP
Добавьте прагму критической секции в код
Откомпилируйте код
Проверьте Thread Checker
Если будут ошибки, исправьте их, и снова выполните проверку Thread Checker
Запуск ‘1 5000000’ для сравнения
Проверьте Thread Checker
Ускорение ?
№58 слайд
![Задачи повышения](/documents_6/d150ed750ddfb77c2349c38b98aa1b8a/img57.jpg)
Содержание слайда: Задачи повышения производительности
Параллельный «оверхед» (оverhead)
«Накладные расходы» на создание потоков, организацию «расписания» их работы …
Синхронизация
Применение без особой необходимости глобальных переменных, которые автоматически являются объектами синхронизации для всех потоков –
если один поток изменил значение глобальной переменной, значит, работа остальных будет приостановлена до тех пор, пока каждый поток не «установит у себя» новое значение глобальной переменной
Дисбаланс загрузки
Недостаточно эффективное распределение работы между потоками «кому сколько работать» - один свою работу сделал и ждет, а другие работают....
Гранулярность
Распределение «квантов» работы для потоков в пределах одного параллельного региона (все потоки выполняют свой «квант» - затем «хватают» следующий)– должно решать проблему дисбаланса загрузки
Скачать все slide презентации Практические рекомендации по распараллеливанию с помощью OpenMP и измерению ускорения. Ошибки при многопоточном программировании одним архивом:
Похожие презентации
-
Параллельное программирование. Проблемы многопоточных приложений. Примитивы синхронизации потоков
-
Многопоточное программирование. Принципы и реализация в java. (Лекция 11)
-
Параллельное и многопоточное программирование. OpenMP. (Лекция 6)
-
Особенности применения задач линейного программирования при моделировании процессов функционирования сложных систем. Раздел 3
-
Параллельное программирование с использованием OpenMP. Лекция 2
-
Параллельное программирование с использованием OpenMP. Лекция 1
-
Создание приложений на С с помощью DirectX
-
Расширенные возможности многопоточного программирования. Лекция 1
-
Методы и системы программирования. Основные принципы объектно-ориентированного программирования. Лекция 5
-
Описание модели приложения с помощью UML