laptop dual video cards – how to programatically detect and/or choose which one is used
我们正在开发使用 DirectX 在 Windows 7 和更高版本的机器上进行 3D 渲染的软件,64 位 C#/.NET 代码。
我们观察到,我们正在测试的一些较新的戴尔笔记本电脑具有双显卡。他们有 Intel HD 4600 集成显卡,也有更快的 NVIDIA Quadro 卡(例如)。
默认情况下,DirectX 应用程序使用 Intel 显卡。这样做是为了保持电池寿命。但是性能明显比NVIDIA卡差。
使用 NVIDIA 控制面板,用户可以控制默认使用哪一个。一旦用户将其切换为使用 NVIDIA 卡,性能就会大幅提升。
所以,我的问题是….有什么方法可以在代码中检测此设置和/或为我们的应用程序修改它(在安装和/或启动时)?我们能否检测到我们的应用程序正在使用英特尔卡,如果它是这些双卡场景之一,提示用户并可能(如果他们要求)更改他们的设置?
目前我们必须引导用户在 NVIDIA 控制面板中手动进行更改。
其他人有任何处理此问题的经验并对如何进行操作有任何建议吗?
您可以使用 C# DLL Interop 访问作为 GPU 部署工具包 (GDK) 一部分的 NVML(NVidia 管理库)的功能。 NVML 包括以下用于枚举和选择 GPU 设备的函数:
1
2 3 4 5 |
nvmlInit()
nvmlDeviceGetPciInfo() nvmlDeviceGetCount() nvmlDeviceGetHandleByIndex() nvmlDeviceGetHandleByPciBusId() |
和
nvmlDeviceSetPersistenceMode().
但是,许多 NVML 功能需要管理员访问权限并重新启动才能更改设置。因此,只有在您的用户对此感到满意(可能在初始安装期间)时,这些才是可行的。
更好的选择是枚举 Direct3D 设备并选择最合适的设备:使用 DirectX11 枚举和使用 DirectX9 枚举。
- 感谢您的回复和建议。我会研究这些选项。
- NVidia 控制面板允许用户在显卡之间进行选择(即 Intel 与 NVidia)。无需重新启动。进行更改后,它将在应用程序的下一次启动时生效。所以我想知道这是否与您发布的功能所提供的不同。
答案是你不能,至少有一些例外。
具有双显卡的笔记本电脑通常附带一个软件,可以手动或自动切换您当前使用的显卡。还有其他的可以自动检测软件应用程序对更大资源的需求,从而自动切换到 nvidia 卡。
但是,有一些解决方法,请参阅此线程。此外,我建议您手动将所有笔记本电脑的默认显卡设置为 nvidia,以消除此问题。
- 自动选择通常只影响默认适配器是什么。您仍然可以使用@axon 答案中的链接手动枚举和选择特定适配器。
- @nirvana8510 我们不能在笔记本电脑上手动设置显卡,它们不是我们的笔记本电脑。这些是客户机器。我们可以告诉客户他们需要进行此选择,但我正在寻找的是一种程序化方法来检测/更改应用程序的设置。
来源:https://www.codenong.com/29504891/