我需要一种非常准确的方法来计算我的程序的一部分.我可以使用常规的高分辨率时钟,但这将返回挂钟时间,这不是我需要的:我需要花时间只运行我的进程.
我清楚地记得看到一个Linux内核补丁,它允许我将我的进程计时到纳秒精度,除了我忘了给它添加书签,我也忘记了补丁的名称:(.
我记得它是如何工作的:
在每个上下文切换时,它将读出高分辨率时钟的值,并将最后两个值的增量添加到正在运行的进程的处理时间.这样可以生成过程实际处理时间的高分辨率精确视图.
使用常规时钟保持常规处理时间,我相信毫秒精确(1000Hz),这对我来说太大了.
有谁知道我在说什么内核补丁?我还记得它就像一个带有字母的字母在它之前或之后 - 像'rtimer'之类的东西,但我记不清楚了.
(也欢迎其他建议)
Marko建议的完全公平调度程序不是我想要的,但看起来很有希望.我遇到的问题是,我可以用来获取处理时间的调用仍然没有返回足够精细的值.
times()返回值21,22,以毫秒为单位.
clock()返回值21000,22000,粒度相同.
getrusage()返回的值如210002,22001(以及其中一些),它们看起来有更好的准确性,但值看起来显着相同.
所以现在我可能遇到的问题是内核有我需要的信息,我只是不知道将返回它的系统调用.
有关更多信息,请参阅此问题.
我用过这些东西的东西是gettimeofday().它提供了一个秒和微秒的结构.在代码之前调用它,之后再调用它.然后使用timersub减去两个结构,你可以从tv_usec字段获得花费的时间.
如果您正在寻找这种级别的时序分辨率,您可能正在尝试进行一些微优化.如果是这种情况,你应该看看PAPI.它不仅提供挂钟和虚拟(仅处理)时序信息,还提供对CPU事件计数器的访问,这在您尝试提高性能时是必不可少的.
http://icl.cs.utk.edu/papi/