'

Ползать или летать? Анализатор производительности VTune™ Performance Analyzer 7.1.

Понравилась презентация – покажи это...





Слайд 0

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


Слайд 1

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


Слайд 2

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


Слайд 3

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


Слайд 4

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


Слайд 5

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


Слайд 6

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


Слайд 7

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


Слайд 8

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


Слайд 9

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


Слайд 10

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


Слайд 11

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


Слайд 12

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


Слайд 13

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


Слайд 14

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


Слайд 15

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


Слайд 16

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


Слайд 17

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


Слайд 18

Sampling: module view


Слайд 19

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


Слайд 20

Sampling over time


Слайд 21

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


Слайд 22

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


Слайд 23

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


Слайд 24

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


Слайд 25

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


Слайд 26

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


Слайд 27

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


Слайд 28

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


Слайд 29

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


Слайд 30

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


Слайд 31

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


Слайд 32

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


Слайд 33

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


Слайд 34

Tuning assistant


Слайд 35

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


Слайд 36

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


Слайд 37

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


Слайд 38

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


Слайд 39

Sampling view


Слайд 40

Source view


Слайд 41

Standalone CallGraph viewer


Слайд 42

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


Слайд 43

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


Слайд 44

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


Слайд 45

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


Слайд 46

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


Слайд 47

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


Слайд 48

Зависимость по данным 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


Слайд 49

Зависимость по данным for(i = 0; i < 1000; i++) { y += buffer[i]; } int t,u,v,w; 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


Слайд 50

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


Слайд 51

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


Слайд 52

backup


Слайд 53

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


Слайд 54

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


Слайд 55

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


Слайд 56

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


×

HTML:





Ссылка: