如何在C#中获取GPU信息?

How get GPU information in C#?

我正在尝试制作一个软件来检查有关用户视频图形卡的一些信息(例如:GPU 时钟速度、总线宽度等)。

我在TechPowerUp GPU-Z软件中看到过这个信息,还有一些SDK的名称,大家可以在下图中看到:

CUDA Toolkit 7 for Nvidia and APP SDK 对于 AMD

现在我有两个问题:

  1. 如何使用 C# 代码访问此信息?
  2. CUDA Toolkit 7 和 APP SDK 可以帮助解决我的问题吗?如果是,怎么做?

我没有任何使用 AMD 工具的经验,但我们设法使用来自 C# 的 NVIDIA 的 NVAPI (https://developer.nvidia.com/nvapi)

我们使用的版本仅作为静态库提供,我们不能p/invoke。我们最终在 C++/CLR 中创建了一个瘦包装器库,然后我们可以从我们的 C# 代码中调用它。

也许 Win32_VideoController CLASS or the GPUinformation Class 可以帮到你。

示例:

using System.Management;
 
public partial class Win_Win32_VideoController : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        using (var searcher = new ManagementObjectSearcher("select * from Win32_VideoController"))
        {
            foreach (ManagementObject obj in searcher.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


目前,它不支持时钟速度或 GPU 使用情况,也不支持传感器信息 (temp),但它可以为您提供总线宽度、内存、已用内存和核心数。但是,向库中添加新函数有坚实的基础,因此,您也可以扩展它以满足您的需要,如果您知道需要向库中添加 NVAPI 的哪些函数,可能会在不到一个小时左右的时间内完成并且您熟悉封送处理的基础知识。

2018 年更新:现在支持 GPU 时钟信息、温度传感器和使用信息。

但对于当前可检索的信息,您需要获取所有当前连接的物理 GPU 的列表。这可以使用 NvAPIWrapper.GPU.PhysicalGPU.GetPhysicalGPUs() 静态方法。 此方法 returns 一个 NvAPIWrapper.GPU.PhysicalGPUs.

的数组

现在您可以使用此 class 的属性检索您想要的信息。

  • NvAPIWrapper.GPU.PhysicalGPU.Bios: 给你 VBIOS 版本
  • NvAPIWrapper.GPU.PhysicalGPU.Board: 给你显卡信息
  • NvAPIWrapper.GPU.PhysicalGPU.BusInfo:获取GPU总线信息
  • NvAPIWrapper.GPU.PhysicalGPU.CUDACores:获取为此 GPU 定义的内核总数
  • NvAPIWrapper.GPU.PhysicalGPU.CurrentPCIEDownStreamWidth:获取下游PCIE接口使用的PCIE通道数
  • NvAPIWrapper.GPU.PhysicalGPU.FullName: 获取GPU全名
  • NvAPIWrapper.GPU.PhysicalGPU.GPUType:表示GPU是集成还是分立
  • NvAPIWrapper.GPU.PhysicalGPU.IRQ:获取GPU中断号
  • NvAPIWrapper.GPU.PhysicalGPU.IsQuadro:表示此 GPU 是否属于 Quadro 系列产品
  • NvAPIWrapper.GPU.PhysicalGPU.MemoryInfo:为您提供有关内存和内存使用情况的所有信息
  • NvAPIWrapper.GPU.PhysicalGPU.PCIIdentifiers:为您提供有关硬件 PCI id 的信息
  • NvAPIWrapper.GPU.PhysicalGPU.PhysicalFrameBufferSizeNvAPIWrapper.GPU.PhysicalGPU.VirtualFrameBufferSize:获取此 GPU 的帧缓冲区大小(以 KB 为单位)
  • NvAPIWrapper.GPU.PhysicalGPU.ShaderSubPipeLines: 获取 GPU Shader SubPipes 或 SM 单元的数量

如果您需要在此版本库中找不到的特定功能,请随时提出问题。