Вопрос № 146799: Как посчитать количество тактов затрачиваемых процессором на выполнение определённого (выбранного) куска кода программы ? Может есть какая-то функция ? Пишу в Visual Studio 2008...
Вопрос № 146.799
Как посчитать количество тактов затрачиваемых процессором на выполнение определённого (выбранного) куска кода программы ? Может есть какая-то функция ? Пишу в Visual Studio 2008
Отвечает: Alexandr A. Rakunov
Здравствуйте, Юрий Анатольевич! Это в общем случае невозможно. Т.к. основное время выполнения программы занимает обращение к памяти, а тут все зависит попали или не попали в кеш, разница во времени выборки одного int'а может достигать десятков раз. Собственно и оптимизация программ заключается в первую очередь и в основном в правильной работе с памятью (последовательный доступ, локальность всех требуемых данных и т.д.) Есть статистические инструменты, наиболее точный из них "Intel(R) VTune(TM)
Performance Analyzer" (работает как понимаете только на интеловских процессорах :) ) - он через равные промежутки времени запоминает где находится указатель команд и на основании этого сообщает какая часть кода быстрее/медленнее. Умеет встраиваться в студию. Для некоторых профайлеров (это название класса подобных программ) нужно строить так называемый "инструментальный" билд, когда в полученный код включаются вызовы функций профайлера (у VTune есть и так
ой вариант работы). Но тут всегда большой вопрос, насколько внесенные изменения искажают реальную картину, т.к. на меленьких функциях накладные расходы на замер могу в несколько раз превосходить время выполнения самой функции, а так же полностью искажать картину кеша. Есть профайлеры встраивающиеся в исполняемый код "на лету", например GlowCode. К плюсам инструментальных и вообще изменяющих код профайлеров можно отнести возможность подсчёта количества и построения дерева вызовов, что позволяет
наглядно оценить узкие места.
Ответ отправил: Alexandr A. Rakunov (статус: 6-ой класс)
Ответ отправлен: 11.10.2008, 14:28