如何在.NET中确定CPUcaching大小?

我想知道是否有办法确定托pipe代码中的CPUcaching大小?

我正在写一个Strassen的C#matrix乘法algorithm,并且想知道我可以将多less个matrix元素放入caching中以提高计算速度。

您可以使用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

这是你在找什么? Win32_Processor类具有L2CacheSize和L3CacheSize成员。

试试这个代码

 using System.Management; uint32 cachsize; public void CPUSpeed() { using(ManagementObject Mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'")) { cachsize = (uint)(Mo["L2CacheSize"]); } } 

我从这里得到它