2010-07-15 76 views
6

我想写一堆使用遗传算法的gcc优化。 我需要测量一些统计函数和拟合函数的汇编函数的执行时间。 通常的时间测量不能使用,因为它受高速缓存大小的影响。
所以我需要一张桌子,我可以看到像这样的东西。如何在处理器周期中测量x86和x86-64汇编命令的执行时间?

command | operands | operands sizes | execution cycles 

我是否误会了什么? 抱歉,糟糕的英语。

+0

你的英文很好。我只是有一个抱怨:​​我不知道是否有一天会遇到这样的情况,那些通过微型优化寻求加速几个百分点的人也会理解通过宏优化获得许多加速因素的价值,而编译器无法做到。 – 2010-07-15 19:00:20

+0

[每个汇编指令需要多少个CPU周期?](http://stackoverflow.com/questions/692718/how-many-cpu-cycles-are-needed-for-each-assembly-instruction) – 2015-10-01 12:22:08

回答

2

随着现代CPU的,有没有简单的表格查找指令将需要多长时间才能完成(但对于一些老的处理器存在这样的表,例如486)。关于每条指令的作用和可能需要多长时间的最佳信息来自芯片制造商。例如。 Intel's documentation manuals是相当不错的(那里也有一个优化手册)。

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

1

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

在这两种情况下,在考虑SMP环境中运行的影响时应谨慎。