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