Ползать или летать? Анализатор производительности VTune Performance Analyzer 7.1. Харченко Евгений Intel, Нижний Новгород.

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



Advertisements
Похожие презентации
Архитектуры с параллелизмом на уровне команд. Два класса Суперскалярные процессоры Процессоры с длинным командным словом.
Advertisements

Архитектуры с параллелизмом на уровне команд. Два класса Суперскалярные процессоры Процессоры с длинным командным словом.
1. Теоретические основы операционных систем (планирование заданий и использования процессора, обеспечение программ средствами коммуникации и синхронизации,
Анализ производительности последовательного кода. Основы VTune Performance Analyzer ЛЕКЦИЯ 9, часть 2.
Лекция 6 Понятие операционных систем Учебные вопросы: 1. Характеристики ОС 2. Свободные и проприетарные ОС.
Архитектура операционной системы. Ядро и вспомогательные модули операционной системы При функциональной декомпозиции ОС модули разделяются на две группы:
Интерфейс текстового процессора Microsoft Word. С помощью ленты можно быстро находить необходимые команды (элементы управления: кнопки, раскрывающиеся.
Основные виды ресурсов и возможности их разделения.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Прерывания Определение прерывания Прерывания представляют собой механизм, позволяющий координировать параллельное функционирование отдельных устройств.
Создатель операционной системы студент из Хельсинки- Линус Торвальдс.
Проф. В.К.Толстых, Технологии разработки Internet- приложений ASP.NET приложения – оптимизация скорости работы приложений Из цикла лекций.
Использование языка Си для программирования ЦСП TMS320C67x.
RISC-архитектуры ( Reduced Instruction Set Computer)
Архитектура микропроцессоров И ее эволюция. Процессор и память: Команды и данные.
Intel® Software Tools – неограниченные возможности разработки эффективных приложений Intel® Software Tools – unlimited opportunities for developing effective.
Введение в параллельную обработку. Уровни параллелизма в процессорах Параллелизм данных (DLP – Data Level Parallelism) Параллелизм команд (ILP – Instruction.
ПРЕЗЕНТАЦИЯ НА ТЕМУ: ПРЕЗЕНТАЦИЯ НА ТЕМУ: ВИДЫ ТРАНСЛЯЦИИ Составил: Ревнивцев М.В Преподаватель: Кленина В.И.
Основы современных операционных систем Лекция 7. (C) В.О. Сафонов,
Выполнили: Мартышкин А. И. Кутузов В. В., Трояшкин П. В., Руководитель проекта – Мартышкин А. И., аспирант, ассистент кафедры ВМиС ПГТА.
Транксрипт:

Ползать или летать? Анализатор производительности VTune Performance Analyzer 7.1. Харченко Евгений Intel, Нижний Новгород

Ползать или летать? Вы купите машину у которой из передач только первая? И максимальная скорость 20 км/ч? Вы купите машину у которой из передач только первая? И максимальная скорость 20 км/ч? –Бывают случаи когда это вполне актуально –Но про адреналин забудьте (тракторы как узкий подкласс не рассматриваются) Снимите ограничитель скорости! Снимите ограничитель скорости!

Что для этого надо? Знать где он находится.

Назначение продукта Intel® VTune Performance Analyzer позволяет идентифицировать проблемы производительности Вашего кода. VTune Performance Analyzer собирает, систематизирует и отображает данные о производительности программного обеспечения, начиная с общесистемного уровня, и до уровня конкретного модуля, функции, строки кода Вашего приложения. Intel® VTune Performance Analyzer позволяет идентифицировать проблемы производительности Вашего кода. VTune Performance Analyzer собирает, систематизирует и отображает данные о производительности программного обеспечения, начиная с общесистемного уровня, и до уровня конкретного модуля, функции, строки кода Вашего приложения.

Чем займёмся? Рассмотрим процесс оптимизации ПО Рассмотрим процесс оптимизации ПО Познакомимся с VTune Performance Analyzer 7.1 и узнаем его: Познакомимся с VTune Performance Analyzer 7.1 и узнаем его: –Функциональность –Возможности –Принципы сбора и анализа данных Познакомимся с VTune Performance Analyzer for Linux 2.0 и узнаем его: Познакомимся с VTune Performance Analyzer for Linux 2.0 и узнаем его: –Функциональность –Возможности Рассмотрим типичные возможности оптимизации Рассмотрим типичные возможности оптимизации

Программа Процесс оптимизации ПО Процесс оптимизации ПО VTune Performance Analyzer 7.1 VTune Performance Analyzer 7.1 VTune Performance Analyzer for Linux 2.0 VTune Performance Analyzer for Linux 2.0 Типичные возможности оптимизации Типичные возможности оптимизации

Процесс оптимизации ПО Следует начать уже на стадии дизайна приложения (в жизни обычно в конце) Следует начать уже на стадии дизайна приложения (в жизни обычно в конце) –Экономия времени (проще сделать хорошо сразу, чем переделать) –Лучшие результаты (причина та же) Создайте специальный набор тестов, входных данных и пр. (benchmark) Создайте специальный набор тестов, входных данных и пр. (benchmark) –Повторяемость –Репрезентативность –Возможность оценки точности данных

Процесс оптимизации ПО Определите hotspots Определите hotspots Создайте benchmark Создайте benchmark Расследуйте причины Расследуйте причины Модифицируйте код Модифицируйте код Повторное тестирование на основе benchmark Повторное тестирование на основе benchmark Hotspots – наиболее нагруженные места в коде (функции) Hotspots – наиболее нагруженные места в коде (функции) Неприемлемый результат Неприемлемый результат Приемлемый результат Приемлемый результат Докладываете начальству, сами за пивом Докладываете начальству, сами за пивом Анализатор производительности Анализатор производительности

Процесс оптимизации ПО Две вещи, которые помогут Вам оптимизировать Ваше приложение: Две вещи, которые помогут Вам оптимизировать Ваше приложение: - Ваши мозги VTune Performance Analyzer - VTune Performance Analyzer Есть ещё компилятор, Есть ещё компилятор, но это тема отдельной лекции Есть ещё компилятор, Есть ещё компилятор, но это тема отдельной лекции

Программа Процесс оптимизации ПО Процесс оптимизации ПО VTune Performance Analyzer 7.1 VTune Performance Analyzer 7.1 VTune Performance Analyzer for Linux 2.0 VTune Performance Analyzer for Linux 2.0 Типичные возможности оптимизации Типичные возможности оптимизации

VTune Performance Analyzer Помогает определить и локализовать проблемы производительности ПО посредством: Помогает определить и локализовать проблемы производительности ПО посредством: –Сбора широкого спектра показателей производительности с ОС на которой выполняется Ваше приложение –Обработки и отображения данных в различных видах, начиная с system-wide и заканчивая исходным кодом и процессорными инструкциями –Идентификации потенциальных проблем производительности и предложения вариантов их разрешения

VTune Performance Analyzer Поддерживает Поддерживает –Платформы: Семейство Intel ® IA-32 Семейство Intel ® IA-32 Семейство Itanium ® Семейство Itanium ® XScale ® XScale ® –Операционные системы: Microsoft Windows* Microsoft Windows* Linux* (Red Hat, SuSe и др.) Linux* (Red Hat, SuSe и др.) –MRTE Java (BEA, IBM, Microsoft, Sun) Java (BEA, IBM, Microsoft, Sun).NET.NET Поддерживает локальный и удалённый сбор данных Поддерживает локальный и удалённый сбор данных –Агент и коллекторы данных на удалённой машине Microsoft Windows* Microsoft Windows* Linux* Linux* MTRE MTRE –Управление процессом, анализ и отображение результатов на host-машине Поддерживает интерфейс командной строки Поддерживает интерфейс командной строки Интегрируется в Visual Studio 7 Интегрируется в Visual Studio 7 Поддерживает до 64 процессоров Поддерживает до 64 процессоров Обеспечивается высоким уровнем клиентского сервиса Обеспечивается высоким уровнем клиентского сервиса

Обзор функциональности Sampling Sampling –time-based –event-based –Over time view Call graph Call graph –Граф вызовов с подробной информацией о временных затратах –Критический путь исполнения Counter monitor Counter monitor –Системные счётчики производительности Статический анализ модулей Статический анализ модулей Intel ® Tuning Assistant Intel ® Tuning Assistant –Комментарии по проблемам, подсказки по модификации кода Обработка данных Обработка данных –«Мастера» для конфигурирования коллекторов –Сравнение и слияние результатов –Упаковка и перенос проектов на другую машину Getting Started tutorial Getting Started tutorial

Sampling Во время работы исследуемого приложения собирает информацию о: Во время работы исследуемого приложения собирает информацию о: – временных затратах в модуле, функции, строке кода (time-based sampling) – событиях процессора, ассоциированных с модулем, функцией, строкой кода (event-based sampling) Все эти данные с разбивкой по процессам и потокам Все эти данные с разбивкой по процессам и потокам

Информация о каких приложениях может быть собрана? 32 и 64 битные Windows приложения 32 и 64 битные Windows приложения 32 и 64 битные динамические Windows библиотеки 32 и 64 битные динамические Windows библиотеки COM+ библиотеки COM+ библиотеки Java приложения Java приложения.NET* приложения.NET* приложения ASP.NET приложения ASP.NET приложения

Как работает time-based sampling В процессе выполнения программы процессор генерирует событие (timer event) с фиксированным интервалом следования (до 1000 в секунду) В процессе выполнения программы процессор генерирует событие (timer event) с фиксированным интервалом следования (до 1000 в секунду) Это событие генерирует прерывание, обрабатываемое специальным драйвером Это событие генерирует прерывание, обрабатываемое специальным драйвером Информация о последней выполненной инструкции и некоторые системные данные записываются, что означает, что Информация о последней выполненной инструкции и некоторые системные данные записываются, что означает, что ещё 1 sample собран В конце сессии мы получаем статистические данные по всей системе: В конце сессии мы получаем статистические данные по всей системе: –Сколько samples собрано каждым модулем –Сколько samples собрано каждой функцией модуля –Сколько samples собрано каждой строкой кода

Как работает event-based sampling В процессе выполнения программы процессор подсчитывает и сохраняет количество произошедших событий процессора, напр. В процессе выполнения программы процессор подсчитывает и сохраняет количество произошедших событий процессора, напр. instructions executed, data & instruction cache misses, branch mis-prediction & more-more others У процессора есть специальные регистры, в которых: У процессора есть специальные регистры, в которых: –Задаётся тип события, которое отслеживается –Подсчитывается и хранится количество произошедших событий –Задаётся sample after value (может задаваться пользователем) Количество событий, которое может быть собрано одновременно зависит от типа процессора Когда собранное количество событий достигает sample after value, генерируется прерывание Когда собранное количество событий достигает sample after value, генерируется прерывание Информация о последней выполненной инструкции и некоторые системные данные записываются, что означает, что Информация о последней выполненной инструкции и некоторые системные данные записываются, что означает, что ещё 1 sample собран В конце сессии мы получаем статистические данные по всей системе: В конце сессии мы получаем статистические данные по всей системе: – –Сколько и каких samples собрано каждым модулем – –Сколько и каких samples собрано каждой функцией модуля – –Сколько и каких samples собрано каждой строкой кода

Что запрашивается у ОС в момент прерывания? Исполнительный адрес (CS:IP) Исполнительный адрес (CS:IP) Соответствующие данному адресу идентификаторы процесса и потока Соответствующие данному адресу идентификаторы процесса и потока Исполняемый модуль, в который попадает данный адрес Исполняемый модуль, в который попадает данный адрес –Если модуль содержит отладочную информацию, в последующем процессе обработки может быть идентифицирована функция и строка кода, соответствующая данному адресу

Sampling: module view

Sampling: данные производительности в привязке к строкам исходного кода

Sampling over time

Используйте event ratios Данные об отдельных событиях процессора могут иметь ограниченную ценность Данные об отдельных событиях процессора могут иметь ограниченную ценность Соотношение между различными событиями (event ratio) может дать более ценную информацию Соотношение между различными событиями (event ratio) может дать более ценную информацию Например: Например: –Cycles per instruction (CPI) Один из важнейших показателей производительности. Хороший показатель свидетельствует об оптимальности кода. Один из важнейших показателей производительности. Хороший показатель свидетельствует об оптимальности кода. –L1 Data cache miss per instruction Имеет место когда запрошенные данные отсутствуют в L1 data cache. Соответственно, запрос передаётся в L2 cache. Имеет место когда запрошенные данные отсутствуют в L1 data cache. Соответственно, запрос передаётся в L2 cache.

Три ключевых преимущества Sampling Technology Не надо специально модифицировать код Не надо специально модифицировать код Но надо скомпилироваться/слинковаться с отладочной информацией (символы и линии) Но надо скомпилироваться/слинковаться с отладочной информацией (символы и линии) Следует использовать релизную конфигурацию с включенной оптимизацией Следует использовать релизную конфигурацию с включенной оптимизацией Sampling является system wide Sampling является system wide Не только Ваше приложение Не только Ваше приложение Вы видите модули ОС, включая драйверы Вы видите модули ОС, включая драйверы Очень низкие накладные расходы Очень низкие накладные расходы

Call graph Собирает данные о: Собирает данные о: –Иерархии вызовов функций –Количестве вызовов –Временных затратах по каждой функции общее время (функция + вызываемые из неё) общее время (функция + вызываемые из неё) собственное время (без затрат вызываемых из неё) собственное время (без затрат вызываемых из неё) общее время ожидания общее время ожидания время ожидания время ожидания Отображает данные в виде графа и таблиц Отображает данные в виде графа и таблиц –С разбивкой по потокам

Как работает call graph Профилирование, т.е. отслеживание входов в функции Профилирование, т.е. отслеживание входов в функции Инструментация кода, т.е. вставка в код вызовов собственных функций, которые запрашивают и сохраняют данные об исполняемом адресе и временные данные Инструментация кода, т.е. вставка в код вызовов собственных функций, которые запрашивают и сохраняют данные об исполняемом адресе и временные данные В дальнейшем эта информация используется для определения потока исполнения программы, критических функций и путей В дальнейшем эта информация используется для определения потока исполнения программы, критических функций и путей Не является system wide: профилирует только заданный модуль и вызываемые из него (либо опционально только заданный модуль) Не является system wide: профилирует только заданный модуль и вызываемые из него (либо опционально только заданный модуль)

Что можно профилировать 32 и 64 битные Windows приложения 32 и 64 битные Windows приложения 32 и 64 битные динамические Windows библиотеки 32 и 64 битные динамические Windows библиотеки COM+ библиотеки COM+ библиотеки Java приложения Java приложения.NET* приложения.NET* приложения ASP.NET приложения ASP.NET приложения

Call graph: потоки выполнения программы

Преимущества call graph technology Позволяет анализировать алгоритмические проблемы, предоставляя данные о иерархии вызовов и критическом пути исполнения Позволяет анализировать алгоритмические проблемы, предоставляя данные о иерархии вызовов и критическом пути исполнения Инструментация проводится автоматически, без вмешательства пользователя Инструментация проводится автоматически, без вмешательства пользователя –Но надо скомпилироваться/слинковаться с отладочной информацией (символы) –Сравнительно высокие накладные расходы

Call graph и sampling Дополняют друг друга, предоставляя в совокупности целостную картину: Дополняют друг друга, предоставляя в совокупности целостную картину: –Sampling покажет hotspots не только в Ваших, но и в системных модулях –Call graph проследит откуда данные функции вызывались, фактически это позволяет проследить алгоритм работы приложения –Call graph покажет точное время, затраченное в каждой функции каждого модуля, вызываемой из Вашего приложения –Sampling позволит углубиться до линий кода и ассемблерных инструкций, предоставляя данные вплоть до этого уровня

Counter monitor Отслеживает производительность системы посредством сбора показателей производительности аппаратных и программных средств (Windows* Perfmon* counters) Отслеживает производительность системы посредством сбора показателей производительности аппаратных и программных средств (Windows* Perfmon* counters) Отображает данные в режиме реального времени и интегрально по окончании сессии Отображает данные в режиме реального времени и интегрально по окончании сессии Сопоставляет эти данные с данными sampling Сопоставляет эти данные с данными sampling

Мониторинг системы в целом Сколь эффективно работает вся система? Насколько эффективно Ваше приложение взаимодействует с системой? Сколь эффективно работает вся система? Насколько эффективно Ваше приложение взаимодействует с системой? –Как используются процессор и другие аппаратные средства? –Как используется память? –Достаточна ли пропускная способность? –Какие системные ресурсы наиболее критичны?

Counter monitor: системные показатели производительности

Обработка данных Сравнение результатов Сравнение результатов –Просто перетащите нужную activity на view другой Слияние результатов Слияние результатов –Позволяет получить целостную картину работы приложения из нескольких запусков, покрывающих лишь отдельные ветки исполнения Упаковка и перенос проектов на другую машину (Pack&Go) Упаковка и перенос проектов на другую машину (Pack&Go) –Пакуете проект (может содержать несколько запусков), копируете 1 файл на другую машину, распаковываете и можете просмотреть результаты Экспорт данных Экспорт данных Sampling – распределение событий процессора по времени Sampling – распределение событий процессора по времени

Tuning assistant База знаний, способная идентифицировать проблему и предоставить советы по оптимизации приложения на основе собранных данных о производительности База знаний, способная идентифицировать проблему и предоставить советы по оптимизации приложения на основе собранных данных о производительности Щёлкните на penalty чтобы получить информацию Щёлкните на penalty чтобы получить информацию

Tuning assistant

Getting started tutorial и Help Getting started tutorial Getting started tutorial –Содержит краткое руководство по использованию VTune Performance Analyzer –Поможет начать работу Создать проект Создать проект Запустить activity Запустить activity Просмотреть результаты Просмотреть результаты Help Help –Исчерпывающая информация о продукте

Программа Процесс оптимизации ПО Процесс оптимизации ПО VTune Performance Analyzer 7.1 VTune Performance Analyzer 7.1 VTune Performance Analyzer for Linux 2.0 VTune Performance Analyzer for Linux 2.0 Типичные возможности оптимизации Типичные возможности оптимизации

VTune Performance Analyzer for Linux Поддерживает Поддерживает –Платформы: Семейство Intel ® IA-32 Семейство Intel ® IA-32 Семейство Itanium ® Семейство Itanium ® –Операционные системы: Linux* (Red Hat, SuSe и др.) Linux* (Red Hat, SuSe и др.) –MRTE Java (BEA, IBM, Sun) на IA-32 Java (BEA, IBM, Sun) на IA-32 Интерфейс командной строки Интерфейс командной строки –Отдельный CallGraph viewer Результаты совместимы с Windows-версией. Результаты совместимы с Windows-версией. –Могут быть упакованы и просмотрены с помощью Windows- версии анализатора Поддерживает до 64 процессоров Поддерживает до 64 процессоров Обеспечивается высоким уровнем клиентского сервиса Обеспечивается высоким уровнем клиентского сервиса

Обзор функциональности Sampling Sampling –event-based Call graph Call graph Source view Source view Обработка данных Обработка данных –Упаковка и перенос проектов на другую машину Man страницы и HTML руководство Man страницы и HTML руководство

Sampling view

Source view

Standalone CallGraph viewer

VTune Performance Analyzer Driver Kit Поставляется с VTune Analyzer 7.1 and VTune Analyzer for Linux 2.0 Поставляется с VTune Analyzer 7.1 and VTune Analyzer for Linux 2.0 Включает GPL код драйвера, инсталляционные скрипты, документацию и бинарии для поддерживаемых ядер. Включает GPL код драйвера, инсталляционные скрипты, документацию и бинарии для поддерживаемых ядер. Позволяет собрать драйвер для VTune для Вашего специфического ядра системы. Позволяет собрать драйвер для VTune для Вашего специфического ядра системы. Доступен по адресу Доступен по адресу source/vdk/ source/vdk/ source/vdk/ source/vdk/

Программа Процесс оптимизации ПО Процесс оптимизации ПО VTune Performance Analyzer 7.1 VTune Performance Analyzer 7.1 VTune Performance Analyzer for Linux 2.0 VTune Performance Analyzer for Linux 2.0 Типичные возможности оптимизации Типичные возможности оптимизации

Алгоритмы Правильный выбор алгоритма является безусловным приоритетом при работе над производительностью ПО. Правильный выбор алгоритма является безусловным приоритетом при работе над производительностью ПО. –Сравните алгоритмы с вычислительной сложностью O(n**2) и O(n*log(n)). При достаточно больших n второй всегда предпочтительнее. При этом большие n как раз тот случай когда производительность особенно важна. Проявите гибкость: Проявите гибкость: –Алгоритмы можно выбирать во время исполнения в зависимости от ситуации (размера входных данных и пр.) Имейте в виду: Имейте в виду: –Алгоритмы имеют определённые требования к структурированию памяти, использованию инструкций. –Они могут иметь проблемы с зависимостью по данным. Взвесьте всю совокупность факторов перед принятием решения. Взвесьте всю совокупность факторов перед принятием решения.

Прописные истины Пользуйтесь знанием специфики Ваших данных Пользуйтесь знанием специфики Ваших данных –Если они имеют выраженные особенности, есть вероятность, что можно написать более эффективный алгоритм, учитывающий эти особенности –Не стесняйтесь написать свою функцию вместо существующей системной (библиотечной) Эффективно используйте системные и библиотечные функции Эффективно используйте системные и библиотечные функции –Выравнивание данных и большой размер буфера скорее всего заметно увеличит производительность –Например, выделить 1Мб памяти за раз гораздо быстрее, чем 1000 раз по 1Кб –Выберите наиболее подходящую функцию Кэшируйте данные Кэшируйте данные Устраните зависимость по данным Устраните зависимость по данным Используйте многопоточность Используйте многопоточность

Специфика процессора Минимизируйте mis-predicted branches Минимизируйте mis-predicted branches –Прерывают последовательное исполнение инструкций, вызывают перeзагрузку кэша –Постарайтесь уменьшить количество непредсказуемых условных переходов Эффективно используйте кэш Эффективно используйте кэш –Используйте меньше памяти для сокращения загрузок кэша –Выровняйте данные и храните их в памяти в соответствии с порядком доступа –Используйте память блоками, меньшими размера кэша

Специфика процессора Вычисления с плавающей точкой Вычисления с плавающей точкой –Избегайте исключений и выходов за предельные величины –Используйте минимальную возможную точность данных и вычислений –Избегайте конвертаций данных типов с плавающей точкой в целочисленные Можно воспользоваться знанием специфики конкретного процессора Можно воспользоваться знанием специфики конкретного процессора –Информация доступна на –Там же на Вы найдёте техническую документацию, а также пробные лицензии на использование инструментов Intel

Зависимость по данным for(int i = 0; i < 10000; i++) { x = a * b; y = a * c; e = b * c; } for(int i = 0; i < 10000; i++) { x *= a * b * c; } 3 : 4

Зависимость по данным for(i = 0; i < 1000; i++) { y += buffer[i]; } int t,u,v,w; t = u = v = w = 0; t = u = v = w = 0; for(i = 0; i < 250; i++) { t += buffer[i]; u += buffer[i+250]; v += buffer[i+500]; w += buffer[i+750]; } y = t+u+v+w; 7 : 5

Эффект размера блока int i; for(i = 0; i < ; i++) for(i = 0; i < ; i++) in = (int*)malloc(1000); in = (int*)malloc(1000); int* in = NULL; in = (int*)malloc(50000*1000); in = (int*)malloc(50000*1000); 600 : 1

Используйте системные функции char a[500]; char c = c; for(j = 0; j < 500; j++) a[j] = c; a[j] = c; char a[500]; char c = c; memset(a, c, 500); 11 : 1

backup backup

Instruction fetch Instruction fetch decode branch prediction branch prediction execution unit execution unit retirement Memory Instruction pool Instruction pool Front-end In-order Execution Out-of-order Execution Out-of-order Back-end In-Order Back-end In-Order

p1:integer p2:integer p3:float p4:float decode1 p5:mem load p6:mem store instruction pool instruction pool

CPU registers trace cache buff 12K trace cache buff 12K L1 cache L2 cache L3 cache (optional) Main memory 8KB 256KB or more 256KB or more 128KB or more 128KB or more

Key Message Производительность ограничена скоростью выполнения инструкций и взаимозависимостью данных Производительность ограничена скоростью выполнения инструкций и взаимозависимостью данных Хорошая смесь инструкций загружает работой все блоки процессора одновременно Хорошая смесь инструкций загружает работой все блоки процессора одновременно Ожидание доступа к памяти при незагруженных работой вычислительных блоках – частая причина низкой производительности Ожидание доступа к памяти при незагруженных работой вычислительных блоках – частая причина низкой производительности Предсказуемые ветвления Предсказуемые ветвления