intel - mem_load_uops_retired.l3_miss 和 offcore_response.demand_data_rd.l3_miss.local_dram 事件之间的区别
问题描述
我有一个Intel(R) Core(TM) i7-4720HQ CPU @ 2.60GHz
( Haswell
) 处理器。AFAIKmem_load_uops_retired.l3_miss
计算DRAM demand
(即non-prefetch
)数据读取访问次数。offcore_response.demand_data_rd.l3_miss.local_dram
顾名思义,计算demand
针对 DRAM 的数据读取次数。因此,这两个事件似乎是等价的(或至少几乎相同)。但基于以下基准,前一个事件的频率远低于后者:
1) 在循环中初始化 1000 个元素的全局数组C
:
Performance counter stats for '/home/ahmad/Simple Progs/loop':
1,363 mem_load_uops_retired.l3_miss
1,543 offcore_response.demand_data_rd.l3_miss.local_dram
0.000749574 seconds time elapsed
0.000778000 seconds user
0.000000000 seconds sys
2) 在 Evince 中打开 PDF 文档:
Performance counter stats for '/opt/evince-3.28.4/bin/evince':
936,152 mem_load_uops_retired.l3_miss
1,853,998 offcore_response.demand_data_rd.l3_miss.local_dram
4.346408203 seconds time elapsed
1.644826000 seconds user
0.103411000 seconds sys
3) 运行 Wireshark 5 秒:
Performance counter stats for 'wireshark':
5,161,671 mem_load_uops_retired.l3_miss
8,126,526 offcore_response.demand_data_rd.l3_miss.local_dram
15.713828395 seconds time elapsed
0.904280000 seconds user
0.693906000 seconds sys
4) 在 Inkscape 中对图像运行模糊滤镜:
Performance counter stats for 'inkscape':
13,852,121 mem_load_uops_retired.l3_miss
23,475,970 offcore_response.demand_data_rd.l3_miss.local_dram
25.355643897 seconds time elapsed
7.244404000 seconds user
1.019895000 seconds sys
在所有四个基准测试中,频率几乎offcore_response.demand_data_rd.l3_miss.local_dram
是. 这合理吗?为什么?请告诉我基准是否过于复杂和粗粒度!mem_load_uops_retired.l3_miss
解决方案
据我(目前)所知,下表显示了 Haswell 上这两个事件之间的差异:
mem_load_uops_retired.l3_miss | offcore_response.demand _data_rd.l3_miss.local_dram | |
---|---|---|
可缓存的已停用负载 Uop | 每 uop 每行 | 是 |
可缓存的非退休负载 Uop | ñ | 是 |
不可缓存的 WC 已停用的加载 Uops | 每行一个事件 | ñ |
不可缓存的 UC 退休负载 Uops | 可能发生 | ñ |
不可缓存的 WC 或 UC 非退休负载 Uop | ñ | ñ |
任何类型的锁定加载到任何内存类型 | 可能发生 | 我不知道 |
旧版 IO 请求 | 可能发生 | ñ |
L1D 预取 | ñ | 是 |
L2 预取到 L2 或 L3 | ñ | ñ |
无意写入的软件预取 | ñ | 是 |
页面浏览加载 | ñ | 是 |
服务单位 | 任何 | 本地 DRAM |
可靠性 | 可能不可靠 | 可靠的 |
现在您应该清楚,这些事件通常根本不等同。同样,比较这两个事件的计数以推断出有意义的事情也不是一件容易的事。
在您提供的所有示例中,offcore_response.demand_data_rd.l3_miss.local_dram
事件计数都大于mem_load_uops_retired.l3_miss
事件计数。但是,不难想出后者大于前者的真实例子。
在所有四个基准测试中,offcore_response.demand_data_rd.l3_miss.local_dram 的频率几乎是 mem_load_uops_retired.l3_miss 的两倍。这合理吗?
我认为“几乎两次”的描述实际上只适用于第二个例子,而不适用于其他例子。如果没有看到确切的代码和执行环境信息,我无法评论您显示的数字。
推荐阅读
- lstm - 在 keras tensorflow 中将 LSTM/GRU 添加到 BERT 嵌入
- javascript - 在 Node.js 中编写高性能服务时,同步代码总是比异步代码糟糕的选择吗?
- swift - 如何创建一个可以保存多个值的文本字段,例如电子邮件至:包含多个收件人电子邮件地址的字段
- python - 对具有列表值的列使用 isin()
- javascript - 发布 TypeScript React 组件时关于 TS 类型的问题
- angular - 无法在 ngAfterViewInit 中获得一致的元素高度
- c - 可能是简单的按位移位问题
- algorithm - 查找树中两个给定顶点之间路径的最有效方法
- php - 如何在 laravel 中获取确切的错误位置
- c# - 如何在 ListView 中显示嵌套列表?