我想计算在C中函数调用期间经过的时间,精度为1纳秒.
C中是否有可用的定时器功能?
如果是,请提供示例代码段.
伪代码
Timer.Start() foo(); Timer.Stop() Display time elapsed in execution of foo()
环境细节: - 在RHEL机器上使用gcc 3.4编译器
请问您使用的是哪种处理器?如果您使用的是x86处理器,则可以查看时间戳计数器(tsc
).此代码段:
#define rdtsc(low,high) \ __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high))
将使CPU已经运行周期的数目low
和high
分别(预计2个long
S;可以将结果存储在一个long long int
)如下:
inline void getcycles (long long int * cycles) { unsigned long low; long high; rdtsc(low,high); *cycles = high; *cycles <<= 32; *cycles |= low; }
请注意,这将返回CPU执行的周期数.您需要获得CPU速度,然后计算出每ns的循环次数,以获得经过的ns数.
为了做到这一点,我已经解析了"cpu MHz"字符串/proc/cpuinfo
,并将其转换为小数.在那之后,它只是一点数学,并记住1MHz =每秒1,000,000个周期,并且有10亿ns /秒.