首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算执行rdtsc指令需要多少个时钟周期?

如何计算执行rdtsc指令需要多少个时钟周期?
EN

Stack Overflow用户
提问于 2012-11-07 09:54:41
回答 2查看 2K关注 0票数 0

我知道无符号的long存储在eax/edx中,但我想知道如何才能知道执行一条rdtsc指令需要多少个时钟周期?

编辑:像这样的东西可以工作吗?

.globl rdtsc

rdtsc:

rdtsc

移动%eax,%ecx

移动%edx,%ebx

rdtsc

子目录%ecx,%eax

子集%ebx,%edx

ret

EN

回答 2

Stack Overflow用户

发布于 2012-11-07 09:57:49

您可以重复执行rdtsc,并查看连续返回值之间的差异。当然,你需要记住像上下文切换之类的东西,这会导致大量的峰值。

有关讨论,请参阅rdtsc, too many cycles

票数 1
EN

Stack Overflow用户

发布于 2012-12-09 03:11:22

您的代码看起来是正确的,但是您应该多次运行它,并使用出现的最短的值。

我认为应该重申这个问题:在代码序列期间使用rdtsc来计算经过的时钟周期的开销是多少。因此,计数代码本质上是(32位示例):

代码语言:javascript
复制
rdtsc
mov dword ptr [mem64],eax
mov dword ptr [mem64+4],edx

; the code sequence to clock would go here when you're clocking it

rdtsc
sub eax,dword ptr [mem64]
sbb edx,dword ptr [mem64+4]    ; I always mix up sbb and sub so this may be incorrect

并且其结果是当对代码序列进行计时时实际经过的"rdtsc开销“时间。

减去rdtsc开销后,需要考虑流水线以及重叠处理是否已完成。对我来说,我假设如果定时序列在少于30个周期内运行,则可能存在需要考虑的未完成的流水线问题。如果序列需要超过100个周期,则可能会出现问题,但可以忽略这些问题。

那么在30到100之间呢?绝对是灰色的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13262203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档