Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба 3 Профайлер / Методичка_по_профайлеру.docx
Скачиваний:
17
Добавлен:
29.03.2016
Размер:
924.99 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ЯДЕРНЫЙ УНИВЕРСИТЕТ «МИФИ»

ОБНИНСКИЙ ИНСТИТУТ АТОМНОЙ ЭНЕРГЕТИКИ

Кафедра компьютерных систем, сетей и технологий

Методическое пособие

по лабораторной работе №3 дисциплины «Системное программирование»

«Оценка эффективности работы программы средствами профайлера в среде разработки Visual Studio»

Обнинск, 2015 г.

1. Цель работы

Изучение основных возможностей профайлера и способов его применения на примере профилировщика Intel VTune Amplifier XE 2013 в среде разработки Visual Studio для оценки используемых аппаратных ресурсов программы.

2. Теоретический материал

2.1 Профайлер. Основные понятия.

Под профайлером в данной работе будем понимать инструмент для оценки производительности программ и планирования работ по ее оптимизации. Это могут быть программы, написанные для использования как в фон Неймановской, так и Гарвардской архитектуре процессора. Программа рассматривается как последовательность команд, которая может содержать такие структуры как циклы, условные переходы, процедуры и другие. Из-за этих структур команды в программе исполняются неодинаковое число раз. Почти в любой программе можно найти некоторую последовательность команд, время и частота исполнения которых значительно выше, чем у других участков программы. Такие участки будем называть “горячими” – на их исполнение тратится сравнительно больше тех или иных ресурсов компьютера. Если удастся заменить этот “горячий” участок программы на аналогичный, результат выполнения которого тот же, но выполняющийся быстрее, то производительность программы возрастет, чем при попытках замены “холодных” участков. Главная задача профайлера – поиск таких “горячих” участков в программе.

Параметры, которые способны отслеживать современные профайлеры:

  • определение общего времени исполнения программы (см. “Elapsed Time” Рисунок 3);

  • определение удельного времени исполнения наиболее активных точек программы (см. “Top Hotspots” Рисунок 3);

  • определение количества вызовов той или иной точки программы;

  • количество тактов процессора;

  • количество выполненных инструкций;

  • количество промахов кэша (случай, когда в кэше не найдено записей, содержащих затребованный элемент данных);

  • количество неверно угаданных переходов;

  • количество обращений к кэшу;

  • объем используемой памяти;

  • многие другие.

Для полноценного анализа приложений необходимо производить замеры по всем ключевым используемым ресурсам. Только так возможно достижение наилучшего быстродействия. Если использовать профайлер в процессе разработки программы, то, например, возможно своевременно избежать ошибок, связанных с архитектурой используемой памяти.

2.1 Параметры оптимизации выполнения программы

а) Общее время исполнения: сведения о времени, которое приложение тратит на выполнение каждой точки программы, позволяют выявить его наиболее "горячие" участки;

б) Удельное время выполнения: если время выполнения некоторой точки программы не постоянно, а варьируется в тех или иных пределах (например, в зависимости от рода обрабатываемых данных), то трактовка результатов профилировки становится неоднозначной, а сам результат — ненадежным. Для более достоверного анализа требуется: определить действительно ли в программе присутствуют подобные "плавающие" точки и, если да, то, определить время их исполнения в лучшем, худшем и среднем случаях;

в) Определение количества вызовов: необходимо для того, чтобы было возможно убедиться в достоверности работы программы. К тому же, оценивать интенсивность исполнения точки можно не только по времени ее выполнения, но и частоте вызова. Например, пусть у нас есть две "горячие" точки, в которых процессор проводит одинаковое время, но первая из них вызывается сто раз, а вторая — сто тысяч раз. Нетрудно догадаться, что, оптимизировав последнюю хотя бы на 1%, мы получим колоссальный выигрыш в производительности, в то время как, сократив время выполнения первой из них вдвое, мы ускорим нашу программу всего лишь на четверть;

г) Определение степени покрытия: не имеет никакого отношения к оптимизации приложений и это побочная функция профилировщиков. Покрытие — это процент реально выполненного кода программы в процессе его профилировки. С другой стороны, оптимизируя программу, очень важно знать, какие именно ее части были профилированы, а какие нет. В противном случае многих "горячих" точек можно просто не заметить только потому, что соответствующие им ветки программы вообще ни разу не получили управления.