How to check if app is cpu-bound or memory-bound?
我有一个应用程序几乎没有计算CPU工作,但主要是内存访问(分配对象并移动它们,几乎没有数字或算术代码)。
我如何衡量我在内存访问延迟(由于缓存未命中)和CPU闲置时花费的时间份额?
我应该注意到该应用程序正在Hyper-V来宾上运行; 我不确定它会带来什么困难,但它可能会。
你总是可以
您可以通过这种方式了解应用程序的行为和数据访问模式。
如果您使用的是Linux,那么您可以使用各种可用于分析的工具,例如:
- OProfile的
- sysprof
- valgrind + kcachegrind
编辑:
要更精确地衡量处理器性能以及内存访问,您还可以尝试AMD CodeAnalyst性能分析器。以下是有关如何将其与英特尔处理器配合使用的说明,但我自己没有尝试过。
您可能会发现有用的另一个工具是Intel Performance Tuning Utility。
除非系统内置延迟,否则只需在专用计算机上运行应用程序一段时间并检查CPU计数器。如果应用程序使用它可以访问的100%的CPU核心,则它受CPU限制。否则,它会花时间在内存分配和IO等其他事情上。