Я хочу измерить время выполнения выбранных циклов в программе C, чтобы увидеть, какой процент от общего времени выполнения программы (в Linux) тратится на эти циклы. Я должен иметь возможность указать циклы, для которых должна быть измерена производительность. Я опробовал несколько инструментов (vtune, hpctoolkit, oprofile) за последние несколько дней, и ни один из них, похоже, не делает этого. Все они находят узкие места в производительности и просто показывают время для них. Это потому, что эти инструменты сохраняют только затраченное время, превышающее пороговое значение (~ 1 мс). Поэтому, если один цикл занимает меньше времени, чем это, то время его выполнения не будет сообщено.
Базовая функция подсчета блоков gprof зависит от функции старых компиляторов, которая сейчас не поддерживается.
Я мог бы вручную написать простой таймер, используя gettimeofday
или что-то в этом роде, но в некоторых случаях это не даст точных результатов. Например:
for (i = 0; i < 1000; ++i)
{
for (j = 0; j < N; ++j)
{
//do some work here
}
}
Теперь я хочу измерить общее время, проведенное во внутреннем цикле, и мне нужно будет поместить вызов gettimeofday
в первый цикл. Таким образом, сам gettimeofday
будет вызываться 1000 раз, что вносит свои собственные накладные расходы, и результат будет неточным.