有没有办法衡量缓存一致性未命中
Is there a way to measure cache coherence misses
给定一个在多核上运行的程序 运行,如果两个或更多核在同一个缓存行上运行,是否有办法测量存在的缓存一致性 invalidations/misses 的数量(即当 Core1 写入缓存行时,这会强制 Core2 刷新其缓存行副本,以便两个内核保持一致)?
如果我对这个概念使用了错误的术语,请告诉我。
是的,可以使用硬件性能计数器。
但是,获取它们的方式取决于操作系统和您的处理器。在 Linux 上,perf
也可用于跟踪性能计数器(尤其是 perf stat -e COUNTER_NAME_1,COUNTER_NAME_2,etc.
)。或者,在 Linux 和 Windows 上,Intel VTune 也可以做到这一点。
可以使用 perf list
(或使用 PMU 工具)检索硬件计数器列表。
您要衡量的指标类型类似于 MESI cache-coherence protocol 中的 所有权申请 (RFO)。希望大多数现代 (x86_64) 处理器都包含用于测量 RFO 的硬件事件。在 Intel Skylake 处理器上,有称为 l2_rqsts.all_rfo
的硬件事件,更准确地说是 l2_rqsts.code_rd_hit
和 l2_rqsts.code_rd_miss
在 L2 缓存级别 执行此操作。或者,还有许多更高级的 RFO 相关硬件事件可用于 offcore 级别。
给定一个在多核上运行的程序 运行,如果两个或更多核在同一个缓存行上运行,是否有办法测量存在的缓存一致性 invalidations/misses 的数量(即当 Core1 写入缓存行时,这会强制 Core2 刷新其缓存行副本,以便两个内核保持一致)?
如果我对这个概念使用了错误的术语,请告诉我。
是的,可以使用硬件性能计数器。
但是,获取它们的方式取决于操作系统和您的处理器。在 Linux 上,perf
也可用于跟踪性能计数器(尤其是 perf stat -e COUNTER_NAME_1,COUNTER_NAME_2,etc.
)。或者,在 Linux 和 Windows 上,Intel VTune 也可以做到这一点。
可以使用 perf list
(或使用 PMU 工具)检索硬件计数器列表。
您要衡量的指标类型类似于 MESI cache-coherence protocol 中的 所有权申请 (RFO)。希望大多数现代 (x86_64) 处理器都包含用于测量 RFO 的硬件事件。在 Intel Skylake 处理器上,有称为 l2_rqsts.all_rfo
的硬件事件,更准确地说是 l2_rqsts.code_rd_hit
和 l2_rqsts.code_rd_miss
在 L2 缓存级别 执行此操作。或者,还有许多更高级的 RFO 相关硬件事件可用于 offcore 级别。