自动检测GPU

时间:2014-01-28 05:57:14

标签: winapi gpu

我需要检测GPU(视频卡)并设置适合GPU性能的应用设置。 我能够为每个GPU模型设置一个列表,但我不明白如何轻松检测PC中安装的GPU模型。

解决此任务的最佳方法是什么?有没有办法做这个不依赖于已安装的驱动程序/某些软件?

1 个答案:

答案 0 :(得分:0)

Ben Voigt的上述评论总结道:根本不做

查看是否支持您喜欢的计算API(OpenCL或其他)的最低版本,如果存在所需的扩展,请编译一些内核,看看是否会产生错误。运行内核并对它们进行基准测试。询问API有多少本地/全局内存,它支持的warp大小等等。

如果你真的坚持要检测GPU模型,那就准备好了。有两种方法可以做到这一点,一种是解析显卡的广告人类可读名称,这就是马上要求麻烦(因为许多非常不同的卡会宣传相同的人类可读名称,而某些型号名称甚至撒谎关于他们的建筑一代!) 另一个,略微更好的方法是找到供应商/型号ID组合并查找该组合。这种方法有所改善,但同样痛苦且容易出错。

您可以从调用EnumDisplayDevices时获得的结构内的“key”字符串中解析这些供应商和模型ID。其中,如果我没记错的话,微软称之为“保留”,换句话说,它是不受支持/未记录的。

找出供应商仍然相对容易。供应商ID 0x10DE是nVidia,0x1002是AMD / ATI。 0x163C是英特尔。然而,有时候,很少有廉价的OEM会宣传自己的ID。

然后你有那种毫无意义的型号(它不像更大的数字更好,或者其他一些明显的规则!),你需要在某处查找。 nVidia和AMD正式发布这些[1] [2],尽管它们不一定总是最新的。曾经有一段时间nVidia的名单缺乏近一年的最新型号(尽管我刚刚下载的列表似乎已经完成)。我不知道包括英特尔在内的其他制造商是否一直这样做 在Google上花一些时间会引导您访问this one这样的网站,这些网站不是“官方”网站,但可能会让您无论如何都能找到大多数内容......以一种艰难的方式。

然后,你知道这个模型,你几乎什么都没得到。你仍然需要把它翻译成“对我想要的东西足够好”或“不够好” 您可以通过编译内核并发现没有报告错误并运行它们来找到它。

在你的应用程序发布了3个新的GPU模型后,你会在6个月内做些什么显然无法知道这些已经发布?你怎么对待这些?