多次运行后混淆perf stat结果

时间:2014-09-13 07:33:59

标签: linux performance caching profiling computer-architecture

我连续执行了6次1000x1000矩阵乘法代码以及 perf stat -e cache-misses 命令,得到了以下结果

Observation Cache-Misses Time elapsed(sec)
   1          48822173    7.697147087
   2          48663517    7.710045908
   3          48667119    7.701690126
   4          48867057    7.766267284
   5          48610651    7.701600681
   6          49203583    7.719180737 

正如我们在这里看到的,观察1的缓存未命中大于观察2,3中的缓存未命中。但观察1的经过时间小于观察2,3和3。另一方面,观察4在所有这些观察中具有最高的经过时间,但观察4的高速缓存未命中小于观察3和观察6.根据教科书,增加高速缓存未命中延长了程序的执行时间。那么我们如何解释这种行为呢?谢谢

以下是我的系统详情:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 42
Stepping:              7
CPU MHz:               2300.000
BogoMIPS:              4589.89
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
NUMA node0 CPU(s):     0-3

1 个答案:

答案 0 :(得分:2)

有几种工具可以找到缓存未命中的根本原因。但是很多失误并不总是意味着更长的执行时间。它还取决于缓存未命中级别。

此外,建议执行一次或两次观察运行而不收集热缓存的统计信息(即填充数据):后续运行将受益于第一个使用必要数据预热缓存的运行。

dprof这样的工具可以帮助您找到因缓存未命中而导致的原因和性能问题。试试吧。