Использование инструментов Intel® для оптимизации программ
Презентацию к лекции Вы можете скачать здесь.
Основные характеристики приложения, влияющие на его производительность
- Эффективность вычислений
- Эффективность работы с памятью
- Правильное предсказание переходов
- Эффективность использования векторных инструкций
- Эффективность параллелизации
- Уровень инструкционного параллелилизма
Под эффективностью вычислений подразумевается "не делать лишней работы", что достигается эффективным анализом потока данных. Избегать повторных сложных вычислений, протягивать и свертывать константы, удалять "мертвый код".
Место и роль компилятора
Компилятор — транслятор, который осуществляет перевод всей исходной программы в эквивалентную ей результирующую программу на языке машинных команд или на языке ассемблера.
Основная задача оптимизирующего компилятора – получение кода максимально эффективного для используемого вычислительного комплекса.
С точки зрения разработчика программа должна быть:
- Легко читаемой и модифицируемой
- Легко отлаживаемой
- Быстро исполняемой
Разработчику необходима
- надежная унифицированная среда разработки
- возможность варьировать уровни отладки и быстродействия
- возможность получать высокоэффективный код для различных операционных систем и микропроцессорных архитектур.
Компилятор должен удовлетворить эти требования.
В настоящее время от компилятора требуется получение эффективного и высоконадежного кода. С точки зрения разработчика программа должна быть легко читаемой и модифицируемой. Для реализации этого требования в больших проектах необходима модульность, основная функциональность выносится в отдельные утилиты, используется объектно-ориентированное программирование и т.д. Благодаря этому оптимизация программного кода – сложная и комплексная задача. Дополнительный уровень сложности возникает из-за обилия поддерживаемых архитектур и различных расширений. В результате оптимизирующий компилятор сложный программный комплекс, включающий в себя большое разнообразие оптимизирующих техник.
Оптимизирующий компилятор
Это программный комплекс, работа которого варьируется в зависимости от требований к результирующему коду.
Возникают следующие проблемы:
- Сложность доказательства допустимости тех или иных оптимизаций
- Сложность расчета выгодности оптимизаций
- Отсутствие во время компиляции представления о типичных входных данных
Для достижения хороших результатов требуется тесное сотрудничество с разработчиком
Чтобы использовать умело средства компилятора, программист должен:
- иметь представления о архитектуре, на которой будет использоваться его программа
- ознакомиться с настройками компилятора
- ознакомиться с основными техниками улучшения производительности, которые использует компилятор
- ознакомиться с основными проблемами, вызывающими замедление работы программы
- знать примерные данные, с которыми будет работать программа
- уметь пользоваться инструментами для анализа производительности программы.
Компиляторы Intel
Некоторые полезные опции компилятора
- /Od (-O0 for Linux) – оптимизации отключены, дебаг-режим.
- /O2 (-O2 for linux) – оптимизации "по-умолчанию" .
- /O3 (-O3 for linux) – дополнительные оптимизации.
- /xO (-xO for Linux) – оптимизация под неинтеловскую архитектуру.
- /Qipo (-ipo) - межпроцедурная оптимизация.
- /Qparallel (-parallel) – автопараллелизация.
- /Qopt-report (-opt-report)
- /Qvec-report [1/2/3]
Очень часто, чтобы сделать приложение быстрее, надо просто выбрать правильный компилятор и установить ему правильные опции.
Дополнительные инструменты оптимизации приложений
Существуют различные средства поиска неоптимальных участков кода в зависимости от типов решаемых задач и сред исполнения
Intel VTune™ Amplifier XE Performance Profiler
- предоставляет информацию о производительности программ
- подходит как для последовательных, так и для многопоточных приложений
- версии как для Windows, так и для Linux
- для Windows может интегрироваться в Visual Studio или работать отдельно с собственным GUI
- для Linux – только отдельно
- есть возможность использования из командной строки для удалённого сбора данных или регрессивного тестирования
Intel VTune – многофункциональный инструмент, предназначенный для анализа производительности приложения. Он позволяет получить полную информацию о том, как на самом деле работает ваша программа. Бывает, что даже опытный разработчик не всегда может верно оценить, на что тратятся основные вычислительные ресурсы и какие вычисления являются "узким местом", ограничивающим производительность всего приложения.
Intel VTune™ Amplifier XE Performance Profiler
Помогает проанализировать особенности алгоритма и определить фрагменты приложения, где оно может использовать доступные ресурсы более рационально.
Позволяет найти и определить следующее:
- функции, на вычисление которых тратится основное время (горячие функции)
- фрагменты кода, которые не используют процессор эффективно
- области, наиболее сильно нуждающиеся в оптимизации
- синхронизации, влияющие на производительность приложения
- фрагменты кода, создающие эффект бутылочного горлышка
Intel VTune особенно удобен тем, что для решения большинства своих задач он не требует пересборки программы. VTune – не статический анализатор, он собирает информацию о том, как работает интересующее приложение или вся система в реальных условиях, на реальных данных, "под нагрузкой". Желательно, что бы исследуемая программа была скомпилирована с сохранением отладочной информации. В этом случае можно будет "провалиться" вплоть до исходного кода и получить детальную характеристику каждой строчки исполняемого кода. Какая именно информация будет собрана и насколько она будет подробной, зависит от режима работы Intel VTune и от настроек. Далее мы познакомимся и с возможными режимами работами и с настройками. Отведённое нам время позволит это сделать лишь достаточно поверхностно, в виде ознакомления. Тем не менее основные моменты станут понятными, подробности вы всегда сможете узнать у самого VTune. VTune мощный и, вообще говоря, достаточно сложный инструмент. Точнее, с его помощью можно делать весьма сложные вещи, крайне трудно осуществимые без его помощи. Тем не менее, пользоваться им не сложно. Это инструмент с долгой историей, с набором дочерних и параллельных проектов, которые, в том числе, активно используются и внутри компании. Помимо документации VTune содержит отличный контекстный help, который поможет вам разобраться. Так же есть документация, как я уже сказал, также форумы поддержки и базы знаний Intel, ну и Google спешит на помощь?
Почему здесь выделена Java? Потому что с подобными языками есть проблема. А именно, исполняемого кода в явном виде не существует. Исполняемый код создаётся Just In Time Compiler’ом прямо в памяти непосредственно во время работы приложения. Более того, со временем код может перекомпилироваться для получения лучшей производительности. Особенность VTune в том, что он умеет работать с такими вещами.
Шаги по использованию VTune
Сборка приложения
Для получения более детальной информации посредством VTune рекомендуется компилировать приложения в режиме debug с генерацией символьной информации
Запуск анализа
Запуск из графического интерфейса осуществляется интуитивно понятно