我想知道是否有一种方法可以确定托管代码中的 CPU 缓存大小?
我正在用 C# 编写用于矩阵乘法的 Strassen 算法,想知道我可以将多少矩阵元素放入缓存以提高计算速度。
最佳答案
您可以使用 WMI 检索缓存信息。
您首先需要将对System.Management.dll
的引用添加到您的项目中,然后您可以使用以下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
namespace Scratch
{
public enum CacheLevel : ushort
{
Level1 = 3,
Level2 = 4,
Level3 = 5,
}
public static class CPUInfo
{
public static List<uint> GetCacheSizes(CacheLevel level)
{
ManagementClass mc = new ManagementClass("Win32_CacheMemory");
ManagementObjectCollection moc = mc.GetInstances();
List<uint> cacheSizes = new List<uint>(moc.Count);
cacheSizes.AddRange(moc
.Cast<ManagementObject>()
.Where(p => (ushort)(p.Properties["Level"].Value) == (ushort)level)
.Select(p => (uint)(p.Properties["MaxCacheSize"].Value)));
return cacheSizes;
}
}
}
有关 Win32_CacheMemory
WMI 类的完整详细信息,请访问:
http://msdn.microsoft.com/en-us/library/aa394080(v=vs.85).aspx
关于c# - 如何确定 .NET 中的 CPU 缓存大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6995787/