ЛЕКЦИЯ 8 Анализ производительности многопоточных приложений с помощью инструментов на примере Intel® Thread Profiler.

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



Advertisements
Похожие презентации
Help: настройка Visual Studio.Net для создания консоль-приложения на основе Intel C++ с применением OpenMP. Инструменты «Практическое параллельное программирование.
Advertisements

Ребусы Свириденковой Лизы Ученицы 6 класса «А». 10.
Типовые расчёты Растворы
Урок повторения по теме: «Сила». Задание 1 Задание 2.
Интернет Университет Суперкомпьютерных технологий Лекция 4 Методы построения параллельных программ (продолжение) Учебный курс Введение в параллельные алгоритмы.
Школьная форма Презентация для родительского собрания.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 4 Трансформация логической модели в программный код Лекции читает кандидат технических.
Лекция 3 Раздел 3,1 Windows Phone Темы раздела 3.
Michael Jackson
Интернет Университет Суперкомпьютерных технологий Лекция 3 Методы построения параллельных программ (продолжение) Учебный курс Введение в параллельные алгоритмы.
1 Основы надежности ЛА Надежность сложных систем.
Лекция 1 Раздел 1 Windows Phone Темы раздела 3 Windows Phone Устройство на платформе Windows Phone 4.
1 1. Все внешние силы лежат в одной плоскости, проходящей через главную ось сечения 2. Силы перпендикулярны продольной оси Вначале рассматривается наиболее.
Разработал: Учитель химии, биологии высшей квалификационной категории Баженов Алексей Анатольевич.
Интернет Университет Суперкомпьютерных технологий Отладка эффективности OpenMP- программ. Учебный курс Параллельное программирование с OpenMP Бахтин В.А.,
Интернет Университет Суперкомпьютерных технологий Лекция 1 Основные понятия Учебный курс Введение в параллельные алгоритмы Якобовский М.В., д.ф.-м.н. Институт.
Интернет Университет Суперкомпьютерных технологий Лекция 3 Методы построения параллельных программ (продолжение) Учебный курс Введение в параллельные алгоритмы.
Интернет Университет Суперкомпьютерных технологий Лекция 3 Методы построения параллельных программ Учебный курс Введение в параллельные алгоритмы Якобовский.

Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Транксрипт:

ЛЕКЦИЯ 8 Анализ производительности многопоточных приложений с помощью инструментов на примере Intel® Thread Profiler

2 ЛИТЕРАТУРА 99% - по материалам тренинга Intel для преподавателей ВУЗов, апрель 2006, Нижний Новгород, «свободный» перевод Калининой А.П.

3 Цели и задачи После выполнения упражнений этого модуля Вы сможете… Применять Thread Profiler для выявления типичных ошибок и повышения производительности вычислений в приложениях на основе Windows* threads и OpenMP

4 Содержание Как и что можно анализировать с помощью Intel® Thread Profiler Понятие критического пути (c ritical path ) и его анализ Изучение различных диаграмм представления данных, предоставляемых Thread Profiler Обзор общих задач повышения производительности многопоточного приложения Уменьшение дисбаланса загрузки потоков Как осуществлять синхронизацию потоков Анализ процесса оптимизации многопоточного приложения с целью повышения производительности вычислений

5 Зачем это надо... Создание эффективно работающего многопоточного приложения является достаточно сложной задачей, решение которой требует значительных временных затрат Дополнительные, по сравнению с последовательной программой, сложности вызваны взаимодействием одновременно работающих потоков Дисбаланс загрузки потоков Синхронизация потоков «Накладные расходы» на создание параллельных конструкций

6 Intel® Thread Profiler «Вставлен» в среду VTune Сборка данных на основе работы приложения, «инструментированного» с помощью VTune Предназначен для анализа производительности OpenMP* приложений или многопоточных приложений с использованием потоков Win32* API и POSIX* Выявляет в многопоточном приложении «узкие места», которые непосредственно влияют на производительность

7 Как и что можно анализировать с помощью Intel® Thread Profiler Поддерживает несколько различных компиляторов Компиляторы Intel® C++ и Fortran, v7 и выше Microsoft* Visual* C++, v6 Microsoft* Visual* C++.NET* 2002 & 2003 Editions Интегрируется в среду Microsoft Visual Studio.NET* Бинарное «инструментирование» приложений Различные способы фильтрации данных и различные диаграммы для их представления с целью организации анализа Анализ «критического пути» (critical path)

8 «Критический путь» - самый «длинный» путь выполнения Что такое «критический путь» ? Многопоточное приложение содержит несколько потоков выполнения Новый выполняющийся поток возникает при создании нового потока или возобновлении работы одним из существующих потоков Поток выполнения завершается, если поток уничтожается или блокируется при синхронизации Поток 1 Поток 2 Поток 3 T0T0 T1T1 T2T2 T3T3 T4T4 T5T5 T6T6 T7T7 T8T8 T9T9 T 10 T 11 T 12 T 13 T 14 T 15 Захватил L Потоки 2 & 3 завершили работу Захватил L Ожидает потоки 2 & 3 Освободил L Захватил L Ожидает L Освободил LОжидает L Поток 2 уничтожается Поток 3 уничтожается Поток 1 уничтожается

9 Анализ критического пути (critical path) Степень «утилизации» (или загрузки) системных ресурсов (System Utilization) Характеристики «по отношению» к той системе, где выполняется приложение Idle («бездействующий»): потоков нет Serial («последовательный»): существует единственный поток Under-subscribed(«меньше, чем доступных»): потоков больше, чем один, но меньше, чем число ядер (процессоров) Parallel («параллельный»): потоков столько же, сколько ядер (процессоров) Over-subscribed («больше, чем доступных»): потоков больше, чем ядер (процессоров) Характеристики взаимодействия потоков Cruise («без взаимодействия»: «крейсерский полет»): потоки выполняются независимо Overhead («оверхед»): выполняется операция с потоком: создание, блокировка и т.д. Blocking («запирание»): поток ожидает некоторого «внешнего события» Impact («взаимное влияние»): поток ждет, пока другой поток закончит работу Чем «короче» критический путь, тем быстрее работает приложение

10 Поток 1 Поток 2 Поток 3 T0T0 T1T1 T2T2 T3T3 T4T4 T5T5 T6T6 T7T7 T8T8 T9T9 T 10 T 11 T 12 T 13 T 14 T 15 Захватил L Ожидает потоки 2 & 3 Ожидает L Освободил LОжидаетL Освободил L Захватил L Потоки 2 & 3 завершили работу Использование аппаратных ресурсов системы Исследуется степень утилизации ресурсов процессора с целью определить уровень «параллельности» (сoncurrency: «одновременное сосуществование») выполнения приложения Здесь: Concurrency – количество активных потоков Пример диаграммы работы потоков по степени «параллельности» для 2х-процессорной конфигурации системы IdleSerialParallelUnder-subscribedOver-subscribed Уровень параллельности Время

11 Характеристики взаимодействия потоков Анализируется взаимодействие и поведение потоков на критическом пути Выявляются объекты, вызывающие «передачу выполнения» (transition) от потока к потоку Cruise timeOverheadBlocking timeImpact time Пример диаграммы работы потоков для 2х-процессорной конфигурации системы Взаимодействие потоков Время Поток 1 Поток 2 Поток 3 T0T0 T1T1 T2T2 T3T3 T4T4 T5T5 T6T6 T7T7 T8T8 T9T9 T 10 T 11 T 12 T 13 T 14 T 15 Захватил L Ожидает потоки 2 & 3 Ожидает L Освободил LОжидает L Освободил L Захватил L Потоки 2 & 3 завершили работу

12 Объединенная диаграмма: уровень параллельности и поведение потоков (степень взаимодействия) Concurrency Level Critical Path Thread Interaction Время Вначале: использование ресурсов системы Затем: анализ поведения по его категориям Степень «параллельности» Критический путь Характер взаимодействия потоков

13 Формы представления данных Thread Profiler Форма представления «критический путь» (Critical Path View) Показывает разбиение «критического пути» (путей) на отдельные временные участки по категориям Форма представления «поведение потоков» (Profile View) Показывает разбиение на временные участки выбранных критических путей, ассоциированных с потоками Пользователь может выбрать другие формы представления для выбранного потока выполнения Уровень «параллельности», потоки, объекты Форма представления «временная диаграмма» (Timeline View) Показывает активность потоков и «передачу активности» на критическом пути для всего приложения Форма представления «участки кода, ответственные за....» Участки кода, ответственные за создание и переключение активности потоков

14 Более подробно о каждой форме представления данных – Help среды VTune

15 Форма представления «критический путь» (Critical Path) «критический путь» - самый высший уровень абстракции представляемых данных Позволяет выбрать один или несколько «критических путей» для подробного анализа

16 Форма представления «критический путь» (Critical Path) «Щелкнуть» по выбранному критическому пути – появится информационная сводка Щелкнуть правой кнопкой – контекстное меню, переход к более подробному анализу Можно посмотреть «критический путь», ассоциированный с каждым потоком

17 Форма представления «поведение потоков» (Profile) Форма представления показывает разбиение выбранного критического пути на категории: «крейсерский режим», взаимное влияние, блокирование, «оверхед» «Правая кнопка» - контекстное меню – фильтрация данных

18 Задание 1 Исследовать работу многопоточной версии задачи поиска простых чисел (вариант с критической секцией) Достигнута ли максимально возможная производительность? Задача: Выполнить запуск приложения через Thread Profiler Исследовать активность потоков с помощью различных форм представления данных

19 Форма представления «критический путь» (Critical Path=CP) «Двойной щелчок» - и переходим к «Profile» форма представления «критический путь» появляется сразу после завершения работы программы

20 Profile View – степень «параллельности» (Concurrency Level=CL) «В одиночку» поток работал ~65% всего времени Два потока работали одновременно ~35% всего времени Вид «степень параллельности» Выберем вид «потоки»

21 Форма представления «Profile» – вид «потоки» Время жизни потока Время активности потока Время на критическом пути Вид «объекты»

22 Форма представления «Profile» – вид «Объекты» Этот объект – причина всех «передач выполнения» Перейдем к «Timeline»

23 Форма представления – временная диаграмма (Timeline View)

24 Форма представления – «участки кода, ответственные за...» (Source View)

25 Задание 2 Исследовать работу многопоточной версии задачи поиска простых чисел (вариант с критической секцией) Достигнута ли максимально возможная производительность? Задача: Исследовать активность потоков с помощью различных форм представления данных Определить степень утилизации аппаратных ресурсов системы Выделить все причины низкой производительности

26 Замечания к заданию 2 Форма представления «степень параллельности» (Concurrency Level view) может быть использована для определения коэффициента полезного действия аппаратных средств Форма представления «временная диаграмма» (Timeline view) позволяет понять причины активности-неактивности потоков исследуемого приложения Время, затраченное на инструментирование, будет включено в результаты первого запуска; таким образом, для приложения, работающего сравнительно мало, второй запуск даст более реалистичные результаты

27 Причины низкой производительности Дисбаланс загрузки (распределение работы между потоками) Не достигается должная степень «параллельности» - опережающие и отстающие Синхронизация Избыточное применение глобальных переменных, не лучший выбор «что и как синхронизовать» «Накладные расходы» на создание параллельных конструкций Гранулярность Неоптимальный выбор «кванта работы» для потока – не достигается максимально возможная степень параллельности

28 Дисбаланс загрузки (Load Imbalance) Неравное количество работы ведет к простою потоков и «потерянному» времени «Занят» «Спит» Время Поток 0 Поток 1 Поток 2 Поток 3 Потоки- старт Слияние потоков

29 Перераспределение работы потокам... Почти всегда необходимо выяснить... Одинаковое ли число заданий дано каждому потоку? Одинаковое ли время требуется на каждое задание? Изменение заданий происходит предсказуемым образом? Установить ли статический (static) порядок назначения заданий Установить ли динамический порядок назначения заданий

30 Перераспределение работы потокам... Динамическое назначение Назначено одно большое задание? Разбить большое задание на много маленьких Много маленьких подзадач собраны в одно большое задание? Откорректировать число подзадач в задании Как можно меньше подзадач в задании? Оптимально – определенное количество подзадач в задании?

31 Дисбаланс загрузки Дисбаланс Разное время активности потоков

32 Задание 3 – дисбаланс загрузки Исследовать работу многопоточной версии задачи поиска простых чисел (вариант с критической секцией) Улучшить баланс потоков с помощью изменения величины «kvant» - количество тестируемых за одно задание чисел (на «простое число»)

33 Замечания к заданию 3 Вид «Потоки» (Threads) позволяет определить степень активности каждого потока в пределах всего приложения Вид «Временная диаграмма» (Timeline) позволяет понять причины «активности-не-активности» потоков в вашем приложении

34 Синхронизация По определению, синхронизация делает выполнение кода последовательным Введение «замков» (Lock) означает увеличение времени бездействия потоков Время «Занят» «Спит» Поток 0 Поток 1 Поток 2 Поток 3 В критической секции

35 «Оптимизация» синхронизации (Synchronization Fixes) Лучше всего – избавиться от синхронизации вообще Это дорогое, но необходимое зло Применять локальное сохранение в потоке (TLS) Использовать локальные переменные для результатов каждого потока, изменять (update) глобальные переменные после того, как работа потоков завершена Выделять память в стеке потока ( alloca ) Применять локально-потоковое запоминание (thread-local storage) API (TlsAlloc) Применять атомические операции для изменения разделяемых переменных везде, где возможно Иногда изменение глобальной переменной допускает атомическую операцию (семейство Interlocked API)

36 Атомическое изменение переменой (Atomic Updates) Иногда можно применить семейство функций Win32 Interlocked* для замены объекта синхронизации static int counter; // Быстро InterlockedIncrement (&counter); //Медленно EnterCriticalSection (&cs); counter++; LeaveCriticalSection (&cs);

37 Ошибки синхронизации – исправить (Synchronization Fixes) Уменьшить размер критических регионов, защищенных синхронизационным объектом Чем больше критический регион, тем «длиннее» синхронизационный объект; другие потоки дольше спят, ожидая освобождения объекта Защищать нужно только доступ к разделяемым переменным

38 Исправление ошибок синхронизации (Synchronization Fixes) Правильный выбор синхронизационного объекта Критическая секция (Critical Section) Локальный объект (Local object) Доступна потокам в пределах одного процесса Низкие «накладные расходы» (~8X меньше, чем мьютекс) Мьютекс (Mutex) Объект ядра (Kernel object) Доступен потокам различных процессов Безопасность от зависаний (может быть освобожден только «владельцем») Другие объекты синхронизации...

39 Object Contention Этот объект вызывает взаимодействие потоков Эти четыре потока… …Взаимодействуют через этот объект

40 Задание 4 Исследовать работу многопоточной версии задачи поиска простых чисел (вариант с критической секцией) Есть над чем поработать, чтобы улучшить производительность Задача: Определить степень и понять причины активности потоков Научится исследовать характеристики группы объектов (Thread Profiler groupings) Исследовать синхронизацию и ее влияние на производительность Ликвидировать причины низкой производительности

41 Замечания к заданию 4 Группировка объектов и потоков позволяет выяснить, посредством каких объектов взаимодействуют потоки Использовать форму представления данных «Временная диаграмма» с целью выявления «узких мест» в исходном коде Для достаточно долго работающих приложений разница между первым и вторым запуском не имеет значения

42 Обзор главных задач оптимизации (General Optimizations) Оптимизация последовательного кода (Serial Optimizations) Подобная оптимизация вдоль критического пути влияет на время работы приложения Параллельная оптимизация (Parallel Optimizations) Уменьшить объем кода, защищаемого объектом синхронизации Правильно распределить задания потокам Функциональный параллелелизм (Functional parallelism) Проанализировать возможные выгоды от увеличения числа процессоров: масштабируемость Во столько ли раз увеличится производительность, во сколько увеличится число процессоров...

43 Задание 5 Изменить работу многопоточной версии задачи поиска простых чисел (вариант с критической секцией) Не запоминать найденных простых чисел, а запоминать только их количество Заменить критическую секцию для переменной количества простых чисел атомической операцией Исследовать производительность с помощью Thread Profiler