я использую valgrind --tool=callgrind
профилировать критическую часть моей программы на C ++.
Сама часть выполняется меньше микросекунды, поэтому я выполняю профилирование большого количества циклов над этой частью.
Я заметил, что инструкции выполняются с кратностью 0,13% времени (процент от общего времени выполнения программы). Так что я вижу только 0,13, 0,26, 0,52 и так далее.
Мой вопрос, должен ли я предположить, что это атомное количество измеряет цикл процессора? Смотри фото.
(The callgrind
вывод представлен графически с kcachegrind
.)
Редактировать: Кстати, глядя на машинный код, я вижу mov
занимает 0,13, так что это, вероятно, действительно тактовый цикл.
Callgrind не измеряет время процессора. Он измеряет инструкции чтения. Отсюда и термин «Ir». Если мультипликаторы составляют .13% (особенно если вы подтвердили с помощью mov), это означает, что они измеряют чтение одной инструкции. Существуют также опции моделирования кэша, которые позволяют определить, какова вероятность того, что вы потеряете кеш.
Обратите внимание, что не все инструкции будут выполняться одинаково, поэтому проценты не совсем соответствуют количеству времени, проведенному в каждом разделе. Тем не менее, это все еще дает вам хорошее представление о том, где ваша программа выполняет большую часть работы и, вероятно, тратит больше всего времени.