Я хочу измерить время работы выбранных циклов в программе на 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 раз, который вводит свои собственные накладные расходы, и результат будет неточным.
Очень часто люди спрашивают, как * измерить * время, когда то, что они действительно хотят, - это знать, как * уменьшить * время. Это то, что вам нужно? –
Nope. Я просто хочу измерить время. Я охарактеризовал петли в программе на основе нескольких шаблонов, и я хочу знать их время выполнения по сравнению со всей программой. –