1
我想用asm和rdtsc来实现我自己的clock()版本。不过,我很不确定它的回报价值。它是周期性的吗?奥德是微秒吗? 我也对CLOCKS_PER_SEC感到困惑。这怎么能保持不变?时钟,rdtsc和CLOCKS_PER_SEC
是否有任何一种将这些值设置为关系的公式?
我想用asm和rdtsc来实现我自己的clock()版本。不过,我很不确定它的回报价值。它是周期性的吗?奥德是微秒吗? 我也对CLOCKS_PER_SEC感到困惑。这怎么能保持不变?时钟,rdtsc和CLOCKS_PER_SEC
是否有任何一种将这些值设置为关系的公式?
你可以在这里找到一个rdtsc的参考实现:
https://github.com/LITMUS-RT/liblitmus/blob/master/arch/x86/include/asm/cycles.h
TSC自复位计数周期数。如果您需要几秒钟的时间值单位,则还需要读取CPU时钟频率并按频率划分TSC值。但是,如果启用了CPU频率调整功能,则这是不准确的。
从[本'clock'参考](http://en.cppreference.com/w/c/chrono/clock):“返回自从开始时使用由过程的近似处理器时间一个与程序执行相关的实现定义的时代。要将结果值转换为秒,请将其除以CLOCKS_PER_SEC。“就是这样。函数返回的单位是实现。 –
它不需要一个公式,只需编写clock()函数的程序员的协作即可。既然他知道它的行为,他也可以写CLOCKS_PER_SEC的#define。 rdtsc的单位是“嘀嗒”,它因机器而异。除非您使用已知良好的时钟进行校准,否则您无法知道滴答声需要多长时间。像时钟()一样。 –
假设程序员想要遵循POSIX ... –