当前位置: 首页 > 知识库问答 >
问题:

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

司空皓
2023-03-14

我知道无符号long-long存储在eax/edx中,但我想知道如何找出执行单个rdtsc指令所需的时钟周期?

编辑:像这样的东西有用吗?

.GlobalRDTSC

rdtsc:

rdtsc

rdtsc

ret

共有2个答案

邢英奕
2023-03-14

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

我认为应该重申这个问题:使用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之间呢?绝对是灰色的。

舒斯伯
2023-03-14

您可以重复执行rdtsc,并查看连续返回值之间的差异。当然,您需要记住一些事情,如上下文切换等,这将导致大量峰值。

参见rdtsc,讨论的周期太多了。

 类似资料:
  • 问题内容: 有没有办法知道在Java中执行一个循环要花多少秒? 例如: 它不必精确到100%,而只是想知道要花费多长时间。里面的算法是一种写入.txt文件的密钥生成器。我希望它花费几分钟,因此对于我的第一次测试,我想计算秒数。 问题答案: 用Java编写微基准测试时需要非常小心。例如: 如果JIT编译器可以弄清楚循环体不影响代码结果,则可以对其进行优化。例如: 可能很快就会“运行”。 JIT编译后

  • 我已经反汇编了一个用MSVC v140编译的小型C程序,并试图估计每条指令的周期,以便更好地理解代码设计如何影响性能。我一直在关注迈克·阿克顿(MikeActon)关于“面向数据的设计和C”的CppCon 2014演讲,特别是我链接到的部分。 他在信中指出了以下几行: 然后他声称,这些2 x 32位读取可能位于同一缓存线上,因此大约需要200个周期。 《英特尔64和IA-32体系结构优化参考手册》

  • 我知道在一堂课上 我可以在初始值设定项列表中初始化,如下所示: 但是,如果计算所需的数据来自字符串并且可能涉及计算,那么从第二个构造函数初始化的正确方法是什么?

  • 我想做这样的事情,我可以在以下代码中运行多个命令: 我如何执行多个命令? 谢了。

  • 本文向大家介绍怎么实现一个计算一年中有多少周?相关面试题,主要包含被问及怎么实现一个计算一年中有多少周?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 首先你得知道是不是闰年,也就是一年是365还是366. 其次你得知道当年1月1号是周几。假如是周五,一年365天把1号 2号3号减去,也就是把第一个不到一周的天数减去等于362  

  • 本文向大家介绍详解Unix/Linux中周期执行指令Crontab命令,包括了详解Unix/Linux中周期执行指令Crontab命令的使用技巧和注意事项,需要的朋友参考一下 简介 crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。 通常,crontab储存的指令被守护进程