6

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

command | operands | operands sizes | execution cycles

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

4

3 回答 3

2

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

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

于 2010-07-21T10:41:10.043 回答
1

读取系统时钟值?

于 2010-07-15T12:04:10.843 回答
1

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

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

于 2010-07-21T10:47:06.417 回答