Как получить информацию о GPU в C#?
Я пытаюсь создать программное обеспечение, которое проверяет некоторую информацию о видеокартах пользователя (например: тактовая частота графического процессора, ширина шины и т. Д.).
Я видел эту информацию в программном обеспечении TechPowerUp GPU-Z и названия некоторых SDK, которые вы видите на следующем рисунке:
CUDA Toolkit 7 для Nvidia и APP SDK для AMD
Теперь у меня есть два вопроса:
- Как я могу получить доступ к этой информации, используя код C#?
- Помогут ли 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.PhysicalGPU
s.
Теперь вы можете получить информацию, которую вы хотите, используя свойства этого класса.
NvAPIWrapper.GPU.PhysicalGPU.Bios
: Дает вам версию VBIOSNvAPIWrapper.GPU.PhysicalGPU.Board
: Дает вам информацию о графической платеNvAPIWrapper.GPU.PhysicalGPU.BusInfo
: Получает информацию о шине графического процессораNvAPIWrapper.GPU.PhysicalGPU.CUDACores
: Получает общее количество ядер, определенных для этого графического процессораNvAPIWrapper.GPU.PhysicalGPU.CurrentPCIEDownStreamWidth
: Получает число линий PCIE, используемых для интерфейса PCIE в нисходящем направленииNvAPIWrapper.GPU.PhysicalGPU.FullName
: Получает полное имя GPUNvAPIWrapper.GPU.PhysicalGPU.GPUType
: Указывает, является ли GPU интегрированным или дискретнымNvAPIWrapper.GPU.PhysicalGPU.IRQ
: Получает номер прерывания графического процессораNvAPIWrapper.GPU.PhysicalGPU.IsQuadro
: Указывает, относится ли этот графический процессор к линейке продуктов QuadroNvAPIWrapper.GPU.PhysicalGPU.MemoryInfo
: Дает вам всю информацию о памяти и использовании памятиNvAPIWrapper.GPU.PhysicalGPU.PCIIdentifiers
: Предоставляет информацию об аппаратных идентификаторах PCINvAPIWrapper.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#.