我知道CPU会记录所有的L1/2/3缓存未命中情况,并且这些信息原则上是可以被访问的。例如,英特尔有一个性能查看器。只是我找不到C#的示例。这些数据是否可以从.NET中获取?
如果你在Windows系统上,可以使用Intel Perfomance Counter Monitor来实现这个目标。除了其他一些工具,它还包含PCM-Service——一个Windows服务,用于添加PCM Windows性能计数器。下载、编译和安装此服务后,你就可以像这样轻松地访问L2缓存未命中率:
var pc = new PerformanceCounter("PCM Core Counters", "L2 Cache Misses", "total_"); // instead of total_ you can use number of core
var value = pc.RawValue; // or pc.NextValue() and so on.
当然,Intel PCM添加了更多有趣的计数器,而不仅仅是缓存丢失,所有这些计数器都可以从.NET访问。