如果没有时钟滴答,那么你的代码就会出现严重问题.您是否编写了自己的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传递给调用者,而只是保持它碰巧有的任何值 – 这可能是两个值都相同.

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐