如何计算执行rdtsc指令所需的时钟周期? [英] How can I count how many clock cycles it takes for the rdtsc instruction to execute?

查看:0
本文介绍了如何计算执行rdtsc指令所需的时钟周期?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

编辑:这样的东西能用吗?

.lobl rdtsc

rdtsc:

rdtsc

移动%eax,%ecx

移动%edX,%eBX

rdtsc

subl%ecx,%eax

subl%eBX,%edX

退回

推荐答案

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

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

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之间又如何呢?绝对是灰色的。

这篇关于如何计算执行rdtsc指令所需的时钟周期?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆