【问题标题】:How to measure x86 and x86-64 assembly commands execution time in processor cycles? [duplicate]如何测量处理器周期中的 x86 和 x86-64 汇编命令执行时间? [复制]
【发布时间】:2011-03-16 08:32:12
【问题描述】:

我想使用遗传算法为 gcc 编写一堆优化。 我需要测量一些统计和拟合函数的汇编函数的执行时间。 不能使用通常的时间测量,因为它受缓存大小的影响。
所以我需要一张桌子,我可以看到这样的东西。

command | operands | operands sizes | execution cycles

我是不是误会了什么? 抱歉英语不好。

【问题讨论】:

  • 你的英语很好。我只是有一个抱怨:​​我不知道那一天是否会到来,那些通过微优化寻求几个百分比加速的人也会明白通过宏优化获得许多加速因素的价值,这是编译器无法做到的。

标签: gcc assembly profiling x86 execution-time


【解决方案1】:

您可以使用程序集(rdtsc 和朋友)或使用诸如 PAPI 之类的检测 API 检测您的代码。但是,无法准确测量在执行一条指令期间花费的时钟周期 - 您可以参考您的架构开发人员手册以获得最佳估算值。

在这两种情况下,您都应该小心考虑在 SMP 环境中运行的影响。

【讨论】:

    【解决方案2】:

    在现代 CPU 中,没有简单的表格可以查看一条指令需要多长时间才能完成(尽管对于某些旧处理器,例如 486 存在此类表格)。关于每条指令的作用以及可能需要多长时间的最佳信息来自芯片制造商。例如。 Intel's documentation manuals 非常好(该页面上还有优化手册)。

    在几乎所有现代 CPU 上,还有一条 RDTSC 指令读取运行代码的处理器的时间戳计数器 EDX:EAX。这也有缺陷,但本质上,如果您正在分析的代码代表真实的使用情况,其执行不会被中断或转移到另一个 CPU 内核,那么您可以使用此指令来获得您想要的时序。 IE。用两条RDTSC 指令包围您正在优化的代码,并将TSC 中的差异作为时序。 (不同测试/情况下的时间差异可能很大;统计数据是您的朋友。)

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 2017-05-28
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      相关资源
      最近更新 更多