linux 时间戳计数器,使用TSC(时间戳计数器)计算时间
如果没有时钟滴答,那么你的代码就会出现严重问题.您是否编写了自己的rdtscl [或从某个不是很好的来源复制它?]顺便说一句,现代英特尔(和AMD)处理器可能具有“恒定的TSC”,因此停止,睡眠,运行速度较慢的处理器仍将以与其他处理器相同的速率剔除 – 它可能不在同步仍然,但这是另一回事.尝试只运行一个从计数器打印值的循环 – 只需要RDTSC指令本身需要大约30-50个时钟周期,所以你应该看到它
如果没有时钟滴答,那么你的代码就会出现严重问题.您是否编写了自己的rdtscl [或从某个不是很好的来源复制它?]
顺便说一句,现代英特尔(和AMD)处理器可能具有“恒定的TSC”,因此停止,睡眠,运行速度较慢的处理器仍将以与其他处理器相同的速率剔除 – 它可能不在同步仍然,但这是另一回事.
尝试只运行一个从计数器打印值的循环 – 只需要RDTSC指令本身需要大约30-50个时钟周期,所以你应该看到它在移动.
编辑:这是我的rdtsc功能:
void rdtscl(unsigned long long *ll)
{
unsigned int lo, hi;
__asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));
*ll = ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 );
}
alernatitvely,作为返回值的函数:
unsigned long long rdtscl(void)
{
unsigned int lo, hi;
__asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));
return ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 );
}
我注意到你的代码没有传递你的unsigned long的指针,这让我怀疑你实际上没有将时间戳计数器BACK传递给调用者,而只是保持它碰巧有的任何值 – 这可能是两个值都相同.
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)