Intel® VTune Amplifier XE
Презентацию к данной лекции Вы можете скачать здесь.
Оптимизация программного обеспечения
Цикл оптимизации
- Выявление "горячих пятен" (Hotspots).
- Определение причин низкой эффективности:
- промахи кэш-памяти;
- доступ к данным;
- простои выполнения программы;
- ошибки предсказания ветвлений;
- другие.
- Оптимизация.
Три уровня оптимизации:
- Системный уровень
- Уровень приложения
- Микроархитектурный уровень
1 шаг анализа производительности программы - на уровне системы.
- Анализ операций обмена с внешними носителями (жесткими дисками).
- Анализ использования оперативной памяти.
- Анализ взаимодействия с сетью.
Цель оптимизации на уровне системы – добиться наиболее эффективного взаимодействия программы с системой. Наличие проблем на уровне системы может лишить смысла оптимизацию программы на других уровнях (если программа мало загружает процессор из-за проблем на уровне системы, даже серьезное ускорение на уровне архитектуры не даст, скорее всего, заметного выигрыша).
Оптимизация на уровне приложения - оптимизация алгоритмов.
Выполняется анализ:
- эффективности использования ППИ;
- эффективности реализации многопоточности;
- наличия блокировок;
- др
3 (самый нижний) уровень анализа – уровень архитектуры. Обладает наименьшим потенциалом эффективности.
Ключевые факторы:
- использование кэш-памяти;
- выравнивание данных;
- другие вопросы.
Наибольший выигрыш (в несколько раз по производительности) достигается на уровне системы.
Умеренный выигрыш - на уровне приложения.
Небольшой выигрыш (до нескольких десятков процентов) - на уровне архитектуры процессора.
При анализе выполнения программы в первую очередь следует обратить внимание на следующие факторы:
- количество промахов при обращении к кэш-памяти. Каждый промах приводит к дополнительным транзакциям между оперативной памятью и кэш-памятью, что отрицательно сказывается на производительности программы;
- ошибки в предсказании ветвлений. Предсказание ветвлений позволяет прогнозировать исполнение программы, принимая меры для его ускорения. Чем точнее выполняется предсказание, тем эффективнее исполняется программа;
- вычисления с плавающей точкой. Значение этого фактора очевидно для вычислительных программ, в которых может выполняться колоссальное количество арифметических операций с плавающей точкой;
- блокировки, связанные с доступом к ресурсам. Каждая блокировка ведёт к потере производительности;
- потери производительности, связанные с отсутствием выравнивания данных. Время выполнения команд с невыровненными данными существенно увеличивается, что приводит и к увеличению времени выполнения программы.
В Help имеется информация о событиях, по которым возможен сбор статистики.
Для выполнения анализа приложения VTune потребуются:
- исполняемый (бинарный) файл, подготовленный соответствующим образом;
- исходный файл (не обязательно, но желательно, поскольку в этом случае результаты сбора статистики можно "привязать" к исходному коду программы);
- символьная информация;
- информация о номерах строк.
Необходим правильно подготовленный тестовый набор данных, соответствующий "стандартной" для данного приложения ситуации. Запуск приложения с этим набором данных даёт опорную точку, по которой будет определяться эффективность различных методов оптимизации производительности.