我们有一个表现不佳的算法,我们认为这是因为CPU缓存未命中导致的。然而,我们无法证明它,因为我们没有任何检测它们的方法。是否有办法告诉我们一个算法产生了多少CPU缓存未命中?我们可以将其移植到任何能够使我们检测它们的语言中。提前感谢您。
发现此类问题最简单的方法是使用分析器并收集与缓存相关的性能计数器。我建议检查以下工具: Intel® VTune™ Amplifier XE(支持:Linux 和 Windows;C/C++、Java、.NET)- http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/ OProfile - http://oprofile.sourceforge.net/ 如果您的算法不太长,是否可以看到其总体结构?
英特尔CPU保留了一些性能计数器,您可以使用一些汇编指令来提取它们。 您能否(1)在静止系统上基准测试缓存未命中率,(2)运行程序并进行比较? 请参阅Intel指令集参考手册第3B卷第18节第15页(18-15),了解您需要编写的汇编代码。