C ++ профилирование: счетчик тактов

я использую valgrind --tool=callgrind профилировать критическую часть моей программы на C ++.

Сама часть выполняется меньше микросекунды, поэтому я выполняю профилирование большого количества циклов над этой частью.

Я заметил, что инструкции выполняются с кратностью 0,13% времени (процент от общего времени выполнения программы). Так что я вижу только 0,13, 0,26, 0,52 и так далее.

Мой вопрос, должен ли я предположить, что это атомное количество измеряет цикл процессора? Смотри фото.
(The callgrind вывод представлен графически с kcachegrind.)

введите описание изображения здесь

Редактировать: Кстати, глядя на машинный код, я вижу mov занимает 0,13, так что это, вероятно, действительно тактовый цикл.

3

Решение

Callgrind не измеряет время процессора. Он измеряет инструкции чтения. Отсюда и термин «Ir». Если мультипликаторы составляют .13% (особенно если вы подтвердили с помощью mov), это означает, что они измеряют чтение одной инструкции. Существуют также опции моделирования кэша, которые позволяют определить, какова вероятность того, что вы потеряете кеш.

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

1

Другие решения


По вопросам рекламы [email protected]