我想使用遗传算法为 gcc 编写一堆优化。我需要测量一些统计和拟合函数的汇编函数的执行时间。不能使用通常的时间测量,因为它受缓存大小的影响。
所以我需要一张桌子,我可以看到这样的东西。
command | operands | operands sizes | execution cycles
我是不是误会了什么?抱歉英语不好。
我想使用遗传算法为 gcc 编写一堆优化。我需要测量一些统计和拟合函数的汇编函数的执行时间。不能使用通常的时间测量,因为它受缓存大小的影响。
所以我需要一张桌子,我可以看到这样的东西。
command | operands | operands sizes | execution cycles
我是不是误会了什么?抱歉英语不好。
在现代 CPU 中,没有简单的表格可以查看一条指令需要多长时间才能完成(尽管对于某些旧处理器,例如 486 存在这样的表格)。关于每条指令的作用以及可能需要多长时间的最佳信息来自芯片制造商。例如,英特尔的文档手册非常好(该页面上还有优化手册)。
在几乎所有现代 CPU 上,还有RDTSC
一条指令可以读取运行代码的处理器的时间戳计数器EDX:EAX
。这也有缺陷,但本质上,如果您正在分析的代码代表真实的使用情况,它的执行不会被中断或转移到另一个 CPU 内核,那么您可以使用该指令来获得您想要的时序。即用两条指令围绕您正在优化的代码,RDTSC
并将 TSC 中的差异作为时间。(不同测试/情况下的时间差异可能很大;统计数据是你的朋友。)