【问题标题】:Detect discrete GPU检测离散 GPU
【发布时间】:2014-06-09 08:47:53
【问题描述】:

我的目标是使用 C# 检测多 GPU 系统上的离散 GPU(例如集成 Intel HD Graphics + 离散 AMD Radeon 卡)

我通常使用该代码:

String gpuName = String.Empty;

ManagementObjectCollection objectCollection = 
new ManagementObjectSearcher("SELECT Name FROM Win32_VideoController").Get();

foreach (ManagementObject managementObject in objectCollection)
{
     foreach (PropertyData propertyData in managementObject.Properties)
     {                    
          if ((gpuName == String.Empty) || (propertyData.Value.ToString().ToLower().IndexOf("intel") == -1))
          {
               gpuName = propertyData.Value.ToString();
               break;                   
          } 
     }
}

对于我的示例来说,它就像一个魅力,如上所述。

但不适合AMDVIA等(我不完全了解所有厂商)集成卡。

那么有没有通用的方法来切断所有集成的 GPU?

【问题讨论】:

  • 我认为没有通用的方法可以做到这一点。特别是对于 AMD,有集成的和独立的 GPU...
  • sharpdx.org 可能会或可能不会帮助您
  • @chrfin 至少我希望存在一些实现该功能的第三方库:)
  • cudafy.codeplex.com 也有一些卡片检测逻辑可能会有所帮助...
  • 谢谢。也许存在一些通用方法(没有第三方库)?

标签: c# gpu integrated


【解决方案1】:

要理解答案,我们需要了解内核模式驱动程序如何创建设备。

要查看驱动程序列表,请从运行对话框调用 msinfo32,选择 软件环境-->系统驱动程序。从那里您可以看到系统上所有已注册的驱动程序,以及它们的启动模式(手动/启动/系统)和状态(运行/停止)。

当即插即用设备驱动程序被加载(由即插即用管理器)时,每个驱动程序将创建一个或多个设备(使用IoCreateDevice)。然而,其中一些司机被归类为公共汽车司机。结果,系统将枚举该总线驱动程序报告的设备,并创建一个树(从一个假想的“根”设备开始)。例如,如果 PCI 总线检测到一个设备,它就不知道该设备的任何信息(可能是网卡、声卡、视频卡等)。因此,即插即用管理器将需要找到设备的相应驱动程序。任何嵌入式/集成设备(声音、网络、视频、usb、火线、sata 等)都被同等对待,通常也是 PCI 设备。最终,操作系统不知道也不关心设备是嵌入式的还是离散的。

进入设备管理器,选择查看-->Devices by connection将显示创建的树。

因此,关于@Machinarius PInvoke 评论,PInvoke 在这里无济于事。但是,我同意他关于检测特性和功能的观点。请记住,我们不知道未来会怎样,因此排除任何设备可能是不明智的。任何需要协助的第 3 方代码都可能是硬编码值。

希望这会有所帮助。

【讨论】:

  • 不客气。您是在寻找更多信息,还是回答了您的问题?
  • 哦,我的健忘 :) 对不起
猜你喜欢
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2012-10-18
  • 2022-07-07
  • 1970-01-01
  • 2017-09-15
相关资源
最近更新 更多