2014-04-14 28 views
0

我需要跟踪某个程序在单个线程内完成的工作量。为此,我想对(c)代码产生最小的影响。有没有办法每X指令触发一段代码?每隔X个指令跳转

我在考虑在编译时,每X指令添加检查。这可以在分支内部完成,但是(没有深入的分支分析)需要在每次跳转时进行检查......在跳跃很多的程序中,这将非常昂贵。

是否有任何工具/技术可以分析代码的分支(编译时),以便将检查放在均匀的地方?

+0

什么是支票的费用估计(是10条指令还是1000条)?你想多久检查一次(什么是X)?为什么不在'stepi'中使用'gdb'? (它会减慢程序..) – osgx

+0

这将以标称的运行方式,所以解决方案必须尽可能轻。所以这将是更多的每1000或更多的指示。 (并且没有gdb) – Simon

+0

如果没有CPU来完成工作,你所要求的是不现实的。从理论上说,编译器的汇编程序可以跟踪你,但由于大多数函数都有多个代码路径,我认为你不会很快看到这个。相反,我认为使用特定于操作系统的函数可以更好地跟踪分配给每个线程的CPU时间。 – mah

回答

0

大概没有其他解决方案比:

  • 使用一个单独的线程,
  • 检查每个分支的周期数
0

我想看另一种方式,即使用Profiler或CPU记帐。

如果您使用的是Linux,那么足够奇怪的是,POSIX规定的times()标准没有(或者至少没有)做它的意义,并且实际上给出了(或给出)了每个线程的会计数据:

http://pubs.opengroup.org/onlinepubs/000095399/functions/times.html

基本上如Linux的边线是引擎盖下过程。这可能对你有用。

(道歉,这不是一个直接的答案,但它是一个评论太长)

+0

对于测量我使用__rdtsc(),它似乎是最好的工具为x86 – Simon

+0

这不是衡量经过时间(即挂钟时间)而不是在线程中花费的时间? – abligh

+0

来自维基百科:“它计数自复位以来的周期数” – Simon