2

我正在尝试计算 Intel Haswell 处理器上程序在不同缓存级别(L1、L2 和 L3)的缓存命中次数。

我编写了一个程序,通过监视相应的事件来计算 L2 和 L3 缓存命中的数量。为此,我查阅了 Intel x86 软件开发手册,并将 cache_all_request 事件和 cache_miss 事件用于 L2 和 L3 缓存。但是,我没有找到 L1 缓存的事件。 也许我错过了什么?

我的问题是:

我应该使用哪个事件编号和 UMASK 值来计算 L1 缓存命中事件?

澄清*

1)我想要实现的最终目标是在程序的所有缓存命中都变为缓存未命中时限制程序的执行时间。如果我可以统计缓存命中请求的数量,我可以将它们视为缓存未命中并计算增加的​​执行时间;

2) 我检查了英特尔 SDM 中的事件 MEM_LOAD_UOPS_RETIRED.L1_HIT,它显示“已将 L1 缓存命中作为数据源的已退休加载 uops。”。我不确定 1 uops 是否需要 1 个周期。有没有关于如何将 uops 转移到循环的参考?

3)最好同时计算负载和存储。(不过,我可以容忍不计算商店请求。)

非常感谢你的帮助!

4

0 回答 0