硬件计数器上的LLCMisses和CacheMisses之间的区别

时间:2018-12-18 20:08:36

标签: benchmarkdotnet

LLCMisses和CacheMisses有什么区别?

1 个答案:

答案 0 :(得分:2)

两个计数器返回的值通常应该相同。

BenchmarkDotNet中可用的计数器是Windows ETW基础结构提供的计数器。不幸的是,据我所知,Microsoft没有提供有关它们中任何一个的任何特定信息,但是我们可以从我们所看到的信息中合理推断出很多。

在英特尔系统上,我看到了完整的PMC源代码清单,该清单以8个具有顺序ID的条目结尾,这8个条目中的前7个(UnhaltedCoreCyclesInstructionRetiredUnhaltedReferenceCycles LLCReferenceLLCMissesBranchInstructionRetiredBranchMispredictsRetired)几乎与七个英特尔架构性能事件计数器的名称和顺序完全匹配(请参阅“英特尔软件性能监控”一章)开发人员手册以了解详细信息)。

8个LbrInserts中的最后一个可能是指英特尔Last Branch Record性能监视功能。因此,假定将这些源直接映射到那些特定的x86计数器似乎是合理的,没有它们它们将不会出现在体系结构中。

在列出的其他5个来源中,TotalIssues返回的值与InstructionRetired相同; BranchInstructions匹配BranchInstructionRetiredCacheMisses匹配LLCMissesBranchMispredictions匹配BranchMispredictsRetired,而TotalCycles匹配UnhaltedCoreCycles

假定其他CPU架构定义了自己的特定于架构的源,这些源映射到不同的特定于架构的计数器,例如ARM上的BranchMispredictions可能会映射到BR_MIS_PRED计数器,该计数器与Intel的“分支错误预测已退休”具有不同的语义,但仍代表分支预测错误的概念。

因此,实际的答案是,如果您要分发具有预定义值的软件,则如果需要Intel计数器的特定含义,请选择LLCMisses。如果只需要高速缓存未命中的概念,请选择CacheMisses,以便它也可以在具有不同性能计数器的其他体系结构上使用。而且,如果您只是在本地运行,选择哪一个都没关系。