Инструменты Intel® для анализа производительности Никита Панов ([email protected]) Ренат Идрисов Intel VTune™ Amplifier XE Performance Profiler • предоставляет информацию о производительности программ; • подходит как для последовательных, так и для многопоточных приложений; • версии как для Windows, так и для Linux; • для Windows может интегрироваться в Visual Studio или работать отдельно с собственным GUI; • для Linux – только отдельно; • есть возможность использования из командной строки для удалённого сбора данных или регрессивного тестирования. 2 Intel VTune™ Amplifier XE Performance Profiler Помогает проанализировать особенности алгоритма и определить фрагменты приложения, где оно может использовать доступные ресурсы более рационально. Позволяет найти и определить следующее: • функции, на вычисление которых тратится основное время (горячие функции); • фрагменты кода, которые не используют процессор эффективно; • области, наиболее сильно нуждающиеся в оптимизации; • синхронизации, влияющие на производительность приложения; • фрагменты кода, создающие эффект бутылочного горлышка. 3 Шаги по использованию VTune • Выбрать объект для анализа. • Скомпилировать. • Запустить анализ. • Интерпретировать результаты. • Улучшить приложение при помощи алгоритмов оптимизации. 4 Сборка приложения • Для получения более детальной информации посредством VTune рекомендуется компилировать приложения в режиме debug с генерацией символьной информации 5 Запуск анализа • Запуск из графического интерфейса осуществляется интуитивно понятно 6 Анализ • После выполнения анализа отображается общая информация • Список содержит функции, на выполнение которых было затрачено наибольшее количество времени 7 Стек вызовов • Можно просматривать не только функцию, но и стек вызова 8 Просмотр по вычислительным потокам • 1 – время • 2 – вычислительные потоки • 3 – использование процессора 9 Исходный код • 1 – код программы, 2 – ассемблерный код, • 3 – процессорное время, • 4 и 5 – элементы навигации для быстрого перемещения по горячим строкам кода 10 Сравнение результатов • Для определения выигрыша, вызванного оптимизациями, удобно воспользоваться функцией сравнения 11 Сравнение результатов • 1 – различие во времени между версиями • 2 – время до оптимизаций • 3 – время после оптимизаций 12 Оценка эффективности использования вычислительных ресурсов • Аналогичным образом можно произвести другие виды анализа, например, locks and waits 13 Осуществление анализа • После выполнения анализа вам также будет представлена краткая информация, но уже по другому аспекту 14 Осуществление анализа • Также имеется возможность просмотра более детальной информации по стеку вызова и объектам синхронизации • 1 – объект, 2 – использование процессора, • 3 – количество циклов ожидания 15 Анализ исходного кода • 1 – строки кода, 2 – использование процессора, • 3 – общее количество циклов ожидания, • 4 - навигация 16 Сравнение результатов • 1 – различия во времени ожидания, 2 – время ожидания до оптимизаций, 3 – время ожидания после оптимизаций, 4 – разница в количестве циклов ожидания, 5 и 6 – количество циклов ожидания. 17 Некоторые события •CPU_CLK_UNHALTED.CORE – количество тактов процессора •INST_RETIRED.ANY – количество исполненных инструкций •BUS_TRANS_ANY.ALL_AGENTS – количество всех транзакций шины •L2_LINES_IN.SELF.DEMAND – количество промахов по L2 кэшу. •BR_INST_RETIRED.MISPRED – неправильно предсказанные ветвления 18 Время доступа к памяти 200 16000 Write Bandwidth(MB/s) Read Bandwidth(MB/s) 180 14000 160 MB/s 10000 140 CPU: Intel Pentium M (Dothan) 1.8 GHz RAM: DDR2 SDRAM 266MHz BUS: 133 MHz 120 cycles 12000 8000 CPU: Intel Pentium M (Dothan) 1.8 GHz RAM: DDR2 SDRAM 266MHz BUS: 133 MHz Latency(cycles) 100 80 60 6000 40 4000 20 0 10 24 12 28 8 23 55 2 35 84 0 58 36 8 88 06 12 4 90 2 18 4 73 9 26 2 82 8 38 8 29 7 54 6 47 6 77 8 10 10 72 89 5 15 3 6 36 0 21 0 0 60 6 30 4 0 36 1 42 6 0 65 9 59 8 4 90 4 84 0 0 08 06 4 2000 size (bytes) 24 20 20 88 00 32 36 40 76 76 64 20 44 68 12 1 6 3 2 7 6 4 8 8 8 88 10 19 35 58 96 15 2 23 9 37 4 58 1 90 1 3 92 1 47 3 09 0 95 8 45 076 584 597 004 706 170 1 2 3 5 7 12 18 28 44 67 0 4 1 size (bytes) 19 Что влияет на то, насколько плохо использует ресурсы компьютера программа? • Конкуренция за ресурсы • «Узкие места» - bottlenecks Зависимости (например, по данным) • Неиспользование каких-то возможностей (многоядерность, новые архитектурные возможности,..) 20 Производительность приложения INST_RETIRED.ANY 350000000 300000000 250000000 200000000 150000000 100000000 50000000 0 21 Производительность приложения INST_RETIRED.ANY 350000000 Total FSB Commands 2000000 1800000 300000000 1600000 250000000 200000000 1400000 1200000 1000000 150000000 100000000 800000 600000 400000 50000000 200000 0 0 22 Некоторые полезные опции компилятора • • • • • • /Od (-O0 for Linux) – оптимизации отключены, дебаг-режим. /O2 (-O2 for linux) – оптимизации «по-умолчанию» . /O3 (-O3 for linux) – дополнительные оптимизации. /xO (-xO for Linux) – оптимизация под неинтеловскую архитектуру. /Qipo (-ipo) - межпроцедурная оптимизация. /Qparallel (-parallel) – автопараллелизация. • /Qopt-report (-opt-report) • /Qopt-report-file • /Qopt-report-phase • /Qopt-report-help • /Qopt-report-routine • /Qvec-report [1/2/3] 23 Cluster tools Intel Trace Collector & Analyzer Cluster tools предназначены для профилирования распределённых приложений. Приложений использующих MPI. 24 ITAC • Можно увидеть, сколько времени исполнялся вычислительный код, сколько времени тратилось на взаимодействие между нодами 25 26 27 28 Спасибо за внимание!