测量 l1/l2 缓存中加载的用于读取(包括预取)的行数
Measure the number of lines loaded in l1/l2 cache for reads(including prefetch)?
我正在尝试确定一级缓存(处理器英特尔布罗德韦尔(中加载的缓存行数。 我的内核代码是
a[i] = 2*b[i] + 2.3 // i from 0 to pow(10,8)
我正在使用性能事件L1-dcache-load-misses
。测量的数字是预期的两倍。我期待 6M 负载和 6M 商店。但L1-dcache-load-misses
约为12M。然而LLC-stores
如预期的那样(6M(
i( L1-dcache-load-misses
是否同时计算加载和存储未命中?
在英特尔软件开发人员手册(表 19.5(中,对于二级高速缓存,我发现了两个指标
- i(
L2_TRANS.L2_FILL
(R20F0( - ii(
L2_TRANS.L2_WB
(R40F0(
ii( L2_TRANS的确切含义是什么。L2_FILL?是 L2 事务的总数吗?
iii( L2_TRANS的确切含义是什么。L2_WB?是 L2 写入事务的总数吗?
Perf 使用这些映射到预定义计数器事件和掩码的事件别名,但由于每个 CPU 可能具有不同的映射,因此有时会发生变化,您最终可能会计算其他内容。
英特尔论坛上的讨论表明,至少有一些系统(Haswell,但Broadwell应该非常相似(L1-dcache-load-misses
错误地映射到L1替代品,这可以解释双重值(存储也会将行提取到L1缓存中(。
至于L2_trans事件,假设它们被正确映射,它们确实应该计算 L2 的总填充和驱逐。请注意,这可能包括您的加载 + 存储的更多内容,因为 L2 也有代码(在这么小的内核中可能可以忽略不计(和预取(可能很重要,因为您的数据是空间布局的并且易于预取(。
- 可以将力包括在视觉C 中与预编译的标头一起使用
- 次级cacheline预取的成本
- 如何指定远程预处理器包括192.0.2.17://usr/include的路径
- 测量 l1/l2 缓存中加载的用于读取(包括预取)的行数
- 包括来自预构建库Android.mk的标题文件
- 可移植显式预取
- C++内存映射的文件数据预取
- 在外部消息中包括预编码的协议缓冲区消息
- 预处理器#包括指令和宏扩展
- 如何构建应用层预取系统
- 如何在GCC中禁用/启用预取
- Windows XP在C++中启动时读取文本文件的速度较慢;预取
- Cache预取场景- power架构
- Autotools:包括一个预构建的第三方库
- 包括c++预处理器指令在内的代码- Android NDK
- 编译速度的改进包括防护与预编译头文件的对比
- 为什么Intel编译器忽略了Intel MIC的非时序预取指令
- 如何预取不常用的代码?
- 如何使用英特尔预取pragma时,数据隐藏在一个对象
- 包括一个头在预编译头和它外面在我的类头文件