如何通过c++区分专用GPU卡和集成GPU卡?

问题描述 投票:0回答:2

我想通过WMI或C++中的其他方式知道用户是否有集成或专用GPU卡?

我已经检查了 Win32_VideoController,但找不到任何可以帮助我区分两者的东西。

提前致谢。

c++ windows wmi
2个回答
0
投票

令人惊讶的是,这么多年了,没有人提出这个想法。大多数人都说不可能,确实Windows原生并没有提供任何手段来检测是iGPU还是dGPU。然而,如果你能忍受这些限制的话,我设法让它在一定程度上发挥作用。 总体思路是,您可以使用 wmic 获取已安装的 CPU 的名称,并维护所有具有集成显卡的 CPU 的列表(该列表可能很短,具体取决于您需要此功能的用途。) 对于较新的 CPU 型号,例如第 9 代或更新的英特尔台式机处理器和 AMD Ryzen 1000 及更新的处理器,您可以简单地通过 CPU 命名来辨别。 Intel处理器集成显卡将以字母F结尾,而AMD处理器集成显卡将以字母G结尾。然后您可以使用wmic获取所有GPU(包括iGPU)的列表,并通过统计GPU的数量安装后,您可以轻松判断用户是否拥有 iGPU 或 dGPU,因为不可能拥有超过 1 个 iGPU。 因此,如果您检测到CPU带有iGPU,并且wmic只报告1个GPU,那么您就知道它肯定是iGPU。另一方面,如果报告了多个 GPU,您就知道其中一个肯定是 dGPU。当然,如果用户自己手动禁用 iGPU,这不起作用,因此我说这种方法有局限性。


0
投票

非常老的问题,但我想如果有人为此苦苦挣扎,它仍然有意义。我认为从 Windows 10 开始,您可以在操作系统中查询按性能顺序排列的 GPU 列表。这是使用 IDXGIFactory6::EnumAdapterByGpuPreference 方法完成的,并要求列表符合 性能顺序

DXGI_GPU_PREFERENCE::DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE
。现在,如果从列表中排除专用视频内存为零的卡,则应该能够摆脱集成卡。这可以通过查看
卡片描述
中的 DedicatedVideoMemory 变量来完成。

© www.soinside.com 2019 - 2024. All rights reserved.