Как определить размер кэша процессора в .NET? - PullRequest
5 голосов
/ 09 августа 2011

Я хотел бы знать, есть ли способ определить размер кэша ЦП в управляемом коде?

Я пишу алгоритм Штрассена для умножения матриц в C # и хотел бы знать, сколько элементов матрицЯ мог бы вписаться в кеш, чтобы улучшить скорость вычислений.

Ответы [ 3 ]

7 голосов
/ 09 августа 2011

Вы можете использовать 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

1 голос
/ 09 августа 2011

Попробуйте этот код

using System.Management;

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

Я получаю это от Здесь

1 голос
/ 09 августа 2011

это это что вы ищете? Класс Win32_Processor содержит члены L2CacheSize и L3CacheSize.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...