【发布时间】:2010-04-29 18:43:07
【问题描述】:
我想测量 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 次,这会引入自己的开销,结果会不准确。
【问题讨论】:
-
人们经常问如何测量时间,而他们真正想要的是知道如何减少时间。这就是你所追求的吗?
-
不。我只是想测量时间。我正在根据一些模式来描述程序中的循环,我想知道它们相对于整个程序的执行时间。
标签: performance gprof gettimeofday intel-vtune oprofile