gpt4 book ai didi

performance - macOS上的缓存未命中

转载 作者:行者123 更新时间:2023-12-04 04:09:32 28 4
gpt4 key购买 nike

关于此主题有一些问题,但没有一个有真正的答案。问题是:如何测量macOS上的L1,L2,L3(如果有)缓存未命中?

问题在于,即使没有任何外部工具,macOS在理论上也不会提供这些值。在 Instruments 中,我们可以使用计数器并转到记录选项... ,如下所示:

counters

但是,不存在L1高速缓存未命中或L2高速缓存,但是可以选择的大量可能项目:

events

因此,当测量L1和L2的缓存未命中(如果有的话甚至是L3)时,如何计数?

为了检索该神奇的“高速缓存未命中”数字,我应注意哪个列表是“高速缓存未命中”?

最佳答案

在Ivy Bridge,Haswell,Broadwell和Goldmont处理器上,可以使用以下事件来计数缺少L1,L2和L3的cacheable1加载指令的需求加载请求所需的数据高速缓存行数:MEM_LOAD_UOPS_RETIRED.L1_MISSMEM_LOAD_UOPS_RETIRED.L2_MISS ,和MEM_LOAD_UOPS_RETIRED.L3_MISS。在Skylake及更高版本上,相应的事件称为:MEM_LOAD_RETIRED.L1_MISSMEM_LOAD_RETIRED.L2_MISSMEM_LOAD_RETIRED.L3_MISS。这些事件仅计算已退出的装入指令所需的高速缓存行。

在Nehalem及更高版本上,您可以使用以下事件来计数未命中L1,L2和L3的可缓存存储指令中的需求存储请求所需要的缓存行数量:L2_RQSTS.ALL_RFOL2_RQSTS.RFO_MISSOFFCORE_RESPONSE(MSR位1 17、26-29、30-37)。这些事件对从管道中退出或清除的存储指令所需要的缓存行进行计数。

根据情况,仅计算退休指令比计算所有指令的访问量更为有用。不幸的是,没有对应于MEM_LOAD_UOPS_*的商店事件。但是,有些负载事件同时统计了已退休的负载和冲洗的负载。其中包括用于L1负载未命中的L2_RQSTS.ALL_DEMAND_DATA_RD,用于L2负载未命中的L2_RQSTS.DEMAND_DATA_RD_MISS和用于L3负载未命中的OFFCORE_RESPONSE (MSR bits 0, 17, 26-29, 30-37)。请注意,前两个事件还包括来自L1硬件预取器的加载。仅Ivy Bridge和更高版本支持L2_RQSTS.DEMAND_DATA_RD_MISS事件。在Sandy Bridge上,我认为可以通过从L2_RQSTS.DEMAND_DATA_RD_HIT减去L2_RQSTS.ALL_DEMAND_DATA_RD来计算。

另请参阅:How does Linux perf calculate the cache-references and cache-misses events

脚注:

(1)IN指令被计为Haswell上的MEM_LOAD_UOPS_RETIRED.L1_MISS事件(请参阅:What does port-mapped I/O look like on Sandy Bridge)。我还凭经验验证了所有MEM_LOAD_UOPS_RETIRED.L1|2|3|LFB_MISS|HIT事件都不计算来自UC或WC内存类型的负载,它们确实计算了WP,WB和WT内存类型的负载。请注意,本手册仅提及不包括UC负载,并且仅针对某些事件。顺便说一句,MEM_UOPS_RETIRED.ALL_LOADS计算所有内存类型的负载。

关于performance - macOS上的缓存未命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48566825/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com