Опубликован: 10.10.2011 | Доступ: свободный | Студентов: 1426 / 454 | Оценка: 4.31 / 4.16 | Длительность: 05:32:00
Специальности: Программист
Лекция 2:

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

< Лекция 1 || Лекция 2: 12 || Лекция 3 >
Аннотация: Краткий обзор возможных путей оптимизации при помощи программного обеспечения. Выявление критических участков кода, сбор информации о таких событиях как промахи кэширования, неправильное предсказание переходов. Оценка эффективности использования системных ресурсов. Общие рекомендации по использованию VTune в процессе оптимизации работы приложения.

Презентацию к лекции Вы можете скачать здесь.

Основные характеристики приложения, влияющие на его производительность

  • Эффективность вычислений
  • Эффективность работы с памятью
  • Правильное предсказание переходов
  • Эффективность использования векторных инструкций
  • Эффективность параллелизации
  • Уровень инструкционного параллелилизма

Под эффективностью вычислений подразумевается "не делать лишней работы", что достигается эффективным анализом потока данных. Избегать повторных сложных вычислений, протягивать и свертывать константы, удалять "мертвый код".

Место и роль компилятора

Компилятор — транслятор, который осуществляет перевод всей исходной программы в эквивалентную ей результирующую программу на языке машинных команд или на языке ассемблера.

Основная задача оптимизирующего компилятора – получение кода максимально эффективного для используемого вычислительного комплекса.

С точки зрения разработчика программа должна быть:

  • Легко читаемой и модифицируемой
  • Легко отлаживаемой
  • Быстро исполняемой

Разработчику необходима

  • надежная унифицированная среда разработки
  • возможность варьировать уровни отладки и быстродействия
  • возможность получать высокоэффективный код для различных операционных систем и микропроцессорных архитектур.

Компилятор должен удовлетворить эти требования.

В настоящее время от компилятора требуется получение эффективного и высоконадежного кода. С точки зрения разработчика программа должна быть легко читаемой и модифицируемой. Для реализации этого требования в больших проектах необходима модульность, основная функциональность выносится в отдельные утилиты, используется объектно-ориентированное программирование и т.д. Благодаря этому оптимизация программного кода – сложная и комплексная задача. Дополнительный уровень сложности возникает из-за обилия поддерживаемых архитектур и различных расширений. В результате оптимизирующий компилятор сложный программный комплекс, включающий в себя большое разнообразие оптимизирующих техник.

Оптимизирующий компилятор

Это программный комплекс, работа которого варьируется в зависимости от требований к результирующему коду.

Возникают следующие проблемы:

  • Сложность доказательства допустимости тех или иных оптимизаций
  • Сложность расчета выгодности оптимизаций
  • Отсутствие во время компиляции представления о типичных входных данных

Для достижения хороших результатов требуется тесное сотрудничество с разработчиком

Чтобы использовать умело средства компилятора, программист должен:

  • иметь представления о архитектуре, на которой будет использоваться его программа
  • ознакомиться с настройками компилятора
  • ознакомиться с основными техниками улучшения производительности, которые использует компилятор
  • ознакомиться с основными проблемами, вызывающими замедление работы программы
  • знать примерные данные, с которыми будет работать программа
  • уметь пользоваться инструментами для анализа производительности программы.

Компиляторы Intel

С/C++ и Fortran для операционных систем Windows, Linux и Mac OS

Для Windows компилятор может быть интегрирован в Microsoft Visual Studio

Главной целью корпорации является высокая производительность компиляторов

и совместимость с Microsoft Visual Studio на Windows и с gcc на Linux и Mac OS.


Некоторые полезные опции компилятора

  • /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]

Очень часто, чтобы сделать приложение быстрее, надо просто выбрать правильный компилятор и установить ему правильные опции.

Дополнительные инструменты оптимизации приложений


Существуют различные средства поиска неоптимальных участков кода в зависимости от типов решаемых задач и сред исполнения

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 с генерацией символьной информации


Запуск анализа

Запуск из графического интерфейса осуществляется интуитивно понятно

Анализ

  • После выполнения анализа отображается общая информация

  • Список содержит функции, на выполнение которых было затрачено наибольшее количество времени

< Лекция 1 || Лекция 2: 12 || Лекция 3 >