关于性能:如何检查应用程序是cpu绑定还是内存绑定?

How to check if app is cpu-bound or memory-bound?

我有一个应用程序几乎没有计算CPU工作,但主要是内存访问(分配对象并移动它们,几乎没有数字或算术代码)。

我如何衡量我在内存访问延迟(由于缓存未命中)和CPU闲置时花费的时间份额?

我应该注意到该应用程序正在Hyper-V来宾上运行; 我不确定它会带来什么困难,但它可能会。


你总是可以profile你的应用程序,看看它大部分时间花在哪里。

您可以通过这种方式了解应用程序的行为和数据访问模式。

如果您使用的是Linux,那么您可以使用各种可用于分析的工具,例如:

  • OProfile的
  • sysprof
  • valgrind + kcachegrind

编辑:

要更精确地衡量处理器性能以及内存访问,您还可以尝试AMD CodeAnalyst性能分析器。以下是有关如何将其与英特尔处理器配合使用的说明,但我自己没有尝试过。

您可能会发现有用的另一个工具是Intel Performance Tuning Utility。


除非系统内置延迟,否则只需在专用计算机上运行应用程序一段时间并检查CPU计数器。如果应用程序使用它可以访问的100%的CPU核心,则它受CPU限制。否则,它会花时间在内存分配和IO等其他事情上。