我想测量 C 程序中选定循环的运行时间,以便查看在这些循环中花费了执行程序(在 linux 上)的总时间的百分比。我应该能够指定应该测量性能的循环。在过去的几天里,我尝试了几种工具(vtune、hpctoolkit、oprofile),但似乎都没有。他们都发现了性能瓶颈,并只是展示了那些时间。那是因为这些工具只存储高于阈值(~1ms)的时间。因此,如果一个循环花费的时间少于此时间,则不会报告其执行时间。
gprof 的基本块计数功能取决于旧编译器中现在不支持的功能。
我可以手动编写一个简单的计时器使用gettimeofday
或类似的东西,但在某些情况下它不会给出准确的结果。例如:
for (i = 0; i < 1000; ++i)
{
for (j = 0; j < N; ++j)
{
//do some work here
}
}
现在在这里我想测量花费在内部循环中的总时间,我必须gettimeofday
在第一个循环中调用。所以gettimeofday
它自己会被调用 1000 次,这会引入自己的开销,结果会不准确。