我正在寻找一些我用C++编写的小代码路径的非常基本的微基准测试,例如紧密循环。我在Linux和OSX上运行,并使用GCC。亚毫秒级精度有哪些设施?我认为多次运行代码路径(数千万?)的简单测试将为我提供足够的一致性,以使您获得良好的阅读体验。如果有人知道更好的方法,请随时提出建议。
最佳答案
您可以在x86/x86_64上使用"rdtsc"
处理器指令。对于多核系统,请检查CPUID(在Linux中为/proc/cpuinfo)中的“constant_tsc”功能-这意味着所有内核都使用相同的滴答计数器,即使动态频率更改和休眠也是如此。
如果您的处理器不支持constant_tsc,请确保将您的programm绑定(bind)到核心(Linux中的taskset
实用程序)。
在乱序的CPU上使用rdtsc时(除Intel Atom以外,可能都是其他一些低端cpus),请在前面添加“ordering”指令,例如“cpuid”-它将暂时禁用指令重新排序。
另外,MacOsX具有“Shark”,可以测量代码中的某些硬件事件。RDTSC
和乱序的CPU。有关优化的第二本伟大的Fog手册第18节中的更多信息:Optimizing subroutines in assembly language: An optimization guide for x86 platforms(包含全部五本手册的主站点是http://www.agner.org/optimize/)
http://www.scribd.com/doc/1548519/optimizing-assembly