Как получить информацию о GPU в C#?

Я пытаюсь создать программное обеспечение, которое проверяет некоторую информацию о видеокартах пользователя (например: тактовая частота графического процессора, ширина шины и т. Д.).

Я видел эту информацию в программном обеспечении TechPowerUp GPU-Z и названия некоторых SDK, которые вы видите на следующем рисунке:

CUDA Toolkit 7 для Nvidia и APP SDK для AMD

Теперь у меня есть два вопроса:

  1. Как я могу получить доступ к этой информации, используя код C#?
  2. Помогут ли CUDA Toolkit 7 и APP SDK решить мою проблему? если да, то как?

3 ответа

Решение

Может быть, класс Win32_VideoController или класс GPUinformation могут вам помочь.

Пример:

using System.Management;

public partial class Win_Win32_VideoController : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
ManagementObjectSearcher objvide = new ManagementObjectSearcher("select * from Win32_VideoController");

        foreach (ManagementObject obj in objvide.Get())
        {
            Response.Write("Name  -  " + obj["Name"] + "</br>");
            Response.Write("DeviceID  -  " + obj["DeviceID"] + "</br>");
            Response.Write("AdapterRAM  -  " + obj["AdapterRAM"] + "</br>");
            Response.Write("AdapterDACType  -  " + obj["AdapterDACType"] + "</br>");
            Response.Write("Monochrome  -  " + obj["Monochrome"] + "</br>");
            Response.Write("InstalledDisplayDrivers  -  " + obj["InstalledDisplayDrivers"] + "</br>");
            Response.Write("DriverVersion  -  " + obj["DriverVersion"] + "</br>");
            Response.Write("VideoProcessor  -  " + obj["VideoProcessor"] + "</br>");
            Response.Write("VideoArchitecture  -  " + obj["VideoArchitecture"] + "</br>");
            Response.Write("VideoMemoryType  -  " + obj["VideoMemoryType"] + "</br>");
        }
    }
}

Вы также можете обратиться к библиотеке CUDAfy.net.

Вы можете получить основную информацию, используя эту библиотеку:

https://github.com/falahati/NvAPIWrapper


На данный момент он не поддерживает тактовую частоту и использование графического процессора, а также не поддерживает информацию о датчике (temp), но он может получить информацию о ширине шины, памяти, используемой памяти и ядрах. Тем не менее, есть надежная основа для добавления новых функций в библиотеку, и в результате вы также можете расширить ее, чтобы она соответствовала вашим потребностям, вероятно, менее чем за час или около того, если вы знаете, какую функцию NVAPI вам нужно добавить в библиотеку. и вы знакомы с основами маршалинга.

Обновление 2018: теперь он поддерживает информацию о тактовой частоте графического процессора, температурные датчики и информацию об использовании.

Но для информации, которую в настоящее время можно получить, вам нужно получить список всех подключенных в данный момент физических графических процессоров. Это возможно с помощью NvAPIWrapper.GPU.PhysicalGPU.GetPhysicalGPUs() статический метод. Этот метод возвращает массив NvAPIWrapper.GPU.PhysicalGPUs.

Теперь вы можете получить информацию, которую вы хотите, используя свойства этого класса.

  • NvAPIWrapper.GPU.PhysicalGPU.Bios: Дает вам версию VBIOS
  • NvAPIWrapper.GPU.PhysicalGPU.Board: Дает вам информацию о графической плате
  • NvAPIWrapper.GPU.PhysicalGPU.BusInfo: Получает информацию о шине графического процессора
  • NvAPIWrapper.GPU.PhysicalGPU.CUDACores: Получает общее количество ядер, определенных для этого графического процессора
  • NvAPIWrapper.GPU.PhysicalGPU.CurrentPCIEDownStreamWidth: Получает число линий PCIE, используемых для интерфейса PCIE в нисходящем направлении
  • NvAPIWrapper.GPU.PhysicalGPU.FullName: Получает полное имя GPU
  • NvAPIWrapper.GPU.PhysicalGPU.GPUType: Указывает, является ли GPU интегрированным или дискретным
  • NvAPIWrapper.GPU.PhysicalGPU.IRQ: Получает номер прерывания графического процессора
  • NvAPIWrapper.GPU.PhysicalGPU.IsQuadro: Указывает, относится ли этот графический процессор к линейке продуктов Quadro
  • NvAPIWrapper.GPU.PhysicalGPU.MemoryInfo: Дает вам всю информацию о памяти и использовании памяти
  • NvAPIWrapper.GPU.PhysicalGPU.PCIIdentifiers: Предоставляет информацию об аппаратных идентификаторах PCI
  • NvAPIWrapper.GPU.PhysicalGPU.PhysicalFrameBufferSize а также NvAPIWrapper.GPU.PhysicalGPU.VirtualFrameBufferSize: Получает размер буфера кадра в килобайтах для этого графического процессора.
  • NvAPIWrapper.GPU.PhysicalGPU.ShaderSubPipeLines: Получает число шейдерных подсистем GPU или модулей SM

Если вам нужна конкретная функция, которую вы не можете найти в этой версии библиотеки, пожалуйста, не стесняйтесь открыть вопрос.

У меня нет опыта работы с инструментами AMD, но нам удалось использовать NVAPI от NVIDIA ( https://developer.nvidia.com/nvapi) из C#

Версия, которую мы используем, поставляется только как статическая библиотека, мы не можем p/invoke. В итоге мы создали тонкую библиотеку-обертку в C++/CLR, которую мы могли бы затем вызвать из нашего кода C#.

Другие вопросы по тегам