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