Использование инструментов Intel® для оптимизации программ Андрей Ануфриенко Идрисов Ренат

advertisement
Использование инструментов Intel® для
оптимизации программ
Андрей Ануфриенко
Идрисов Ренат
Основные характеристики приложения, влияющие на
его производительность
•
•
•
•
•
•
Эффективность вычислений
Эффективность работы с памятью
Правильное предсказание переходов
Эффективность использования векторных инструкций
Эффективность параллелизации
Уровень инструкционного параллелилизма
Место и роль компилятора
Компилятор — транслятор, который осуществляет перевод всей исходной
программы в эквивалентную ей результирующую программу на языке машинных
команд или на языке ассемблера.
Основная задача оптимизирующего компилятора – получение кода максимально
эффективного для используемого вычислительного комплекса.
С точки зрения разработчика программа должна быть:
• Легко читаемой и модифицируемой
• Легко отлаживаемой
• Быстро исполняемой
Разработчику необходима
• надежная унифицированная среда разработки
• возможность варьировать уровни отладки и быстродействия
• возможность получать высокоэффективный код для различных операционных
систем и микропроцессорных архитектур.
Компилятор должен удовлетворить эти требования.
10/17
/10
•
Оптимизирующий компилятор
Это программный комплекс, работа которого варьируется в зависимости от
требований к результирующему коду.
Возникают следующие проблемы:
• Сложность доказательства допустимости тех или иных оптимизаций
• Сложность расчет выгодности оптимизаций
• Отсутствие во время компиляции представления о типичных входных данных
•
Для достижения хороших результатов требуется тесное сотрудничество с
разработчиком
Чтобы использовать умело средства компилятора, программист должен:
• иметь представления о архитектуре, на которой будет использоваться его
программа
• ознакомиться с настройками компилятора
• ознакомиться с основными техниками улучшения производительности, которые
использует компилятор
• ознакомиться с основными проблемами, вызывающими замедление работы
программы
• знать примерные данные, с которыми будет работать программа
• уметь пользоваться инструментами для анализа производительности программы.
Компиляторы Intel
С/C++ и Fortran для операционных
систем Windows, Linux и Mac OS
Для Windows компилятор может
быть интегрирован в Microsoft
Visual Studio
Главной целью корпорации
является высокая
производительность компиляторов
и совместимость с Microsoft Visual
Studio на Windows и с gcc на Linux
и Mac OS.
www.intel.com/software/products
10/17/10
Некоторые полезные опции компилятора
•
•
•
•
•
•
/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]
6
Дополнительные инструменты оптимизации
приложений
• Существуют различные средства поиска
неоптимальных участков кода в зависимости от типов
решаемых задач и сред исполнения
7
Intel VTune™ Amplifier XE Performance Profiler
•предоставляет информацию о производительности
программ
•подходит как для последовательных, так и для
многопоточных приложений
•версии как для Windows, так и для Linux
•для Windows может интегрироваться в Visual Studio или
работать отдельно с собственным GUI
•для Linux – только отдельно
•есть возможность использования из командной строки
для удалённого сбора данных или регрессивного
тестирования
8
Intel VTune™ Amplifier XE Performance Profiler
Помогает проанализировать особенности алгоритма и
определить фрагменты приложения, где оно может
использовать доступные ресурсы более рационально.
Позволяет найти и определить следующее:
• функции, на вычисление которых тратится основное
время (горячие функции)
• фрагменты кода, которые не используют процессор
эффективно
• области, наиболее сильно нуждающиеся в оптимизации
• синхронизации, влияющие на производительность
приложения
• фрагменты кода, создающие эффект бутылочного
горлышка
9
Шаги по использованию VTune
• Выбрать объект для
анализа
• Скомпилировать
• Запустить анализ
• Интерпретировать
результаты
• Улучшить приложение
при помощи алгоритмов
оптимизации
10
Сборка приложения
• Для получения более детальной информации
посредством VTune рекомендуется компилировать
приложения в режиме debug с генерацией символьной
информации
11
Запуск анализа
• Запуск из графического интерфейса осуществляется
интуитивно понятно
12
Анализ
• После выполнения
анализа отображается
общая информация
• Список содержит
функции, на выполнение
которых было затрачено
наибольшее количество
времени
13
Стек вызовов
• Можно просматривать не только функцию, но и стек
вызова
14
Просмотр по вычислительным потокам
• 1 – время
• 2 – вычислительные потоки
• 3 – использование процессора
15
Исходный код
• 1 – код программы, 2 – ассемблерный код,
• 3 – процессорное время,
• 4 и 5 – элементы навигации для быстрого
перемещения по горячим строкам кода
16
Сравнение результатов
• Для определения выигрыша, вызванного
оптимизациями удобно воспользоваться функцией
сравнения
17
Сравнение результатов
• 1 – различие во времени между версиями
• 2 – время до оптимизаций
• 3 – время после оптимизаций
18
Оценка эффективности использования вычислительных
ресурсов
• Аналогичным образом можно произвести другие виды
анализа, например, locks and waits
19
Осуществление анализа
• После выполнения анализа вам также будет
представлена краткая информация, но уже по другому
аспекту
20
Осуществление анализа
• Также имеется возможность просмотра более
детальной информации по стеку вызова и объектам
синхронизации
• 1 – объект, 2 – использование процессора,
• 3 – количество циклов ожидания
21
Анализ исходного кода
• 1 – строки кода, 2 – использование процессора,
• 3 – общее количество циклов ожидания,
• 4 - навигация
22
Сравнение результатов
• 1 – различия во времени ожидания, 2 – время
ожидания до оптимизаций, 3 – время ожидания после
оптимизаций, 4 – разница в количестве циклов
ожидания, 5 и 6 – количество циклов ожидания
23
Некоторые события
•CPU_CLK_UNHALTED.CORE – количество тактов
процессора
•INST_RETIRED.ANY – количество исполненных
инструкций
•BUS_TRANS_ANY.ALL_AGENTS – количество всех
транзакций шины
•L2_LINES_IN.SELF.DEMAND – количество промахов по L2
кэшу.
•BR_INST_RETIRED.MISPRED – неправильно
предсказанные ветвления
24
Время доступа к памяти
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)
25
Что влияет на то, насколько плохо использует ресурсы
компьютера программа?
• Конкуренция за ресурсы
• «Узкие места» - bottlenecks
 Зависимости (например, по данным)
• Неиспользование каких-то возможностей
(многоядерность, новые архитектурные
возможности,..)
26
Спасибо за внимание!
Download