如何在处理器周期中测量x86和x86-64汇编命令的执行时间?

时间:2010-07-15 10:59:07

标签: gcc assembly profiling x86 execution-time

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

command | operands | operands sizes | execution cycles

我想念一些事吗? 抱歉英语不好。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

答案 2 :(得分:1)

您可以使用程序集(rdtsc和朋友)或使用PAPI等检测API来检测代码。然而,准确测量在执行一条指令期间花费的时钟周期是不可能的 - 您可以参考您的架构开发人员手册以获得最佳估计。

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