有没有办法在多GPU环境中以编程方式选择渲染GPU? (视窗)

前端之家收集整理的这篇文章主要介绍了有没有办法在多GPU环境中以编程方式选择渲染GPU? (视窗)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个OpenGL应用程序将运行在具有不同的多GPU配置(可能不同的Windows版本,从XP到7)的机器.有没有一种常见的方法来选择独立于GPU组合(例如NVIDIA NVIDIA,NVIDIA AMD,NVIDIA Intel等)的OpenGL渲染器的特定GPU?它必须是可以从应用程序代码应用的解决方案,即直接在C中,或者从应用程序调用的脚本,而不需要最终用户干预.

以下是我尝试找到解决方案的几个测试的细节,从非常具体的案例开始,但也许有一个解决方案可以在所有或大多数情况下工作.

有什么可靠的方法来强制GPU执行OpenGL渲染?

任何提示将非常感谢.提前致谢!

试过可能的解决方

带有两个NVIDIA Quadro的Windows XP 64

使用两个Quadro卡的组合进行测试

> Quadro FX 1700 Quadro FX 570
> Quadro FX 1700 Quadro FX 540
> Quadro FX 1700 Quadro NVS 285

在Windows XP 64位下使用相同的驱动程序(版本275.36),我已经使用各种方法相对成功,例如:

>让司机决定.
只要两个卡使用相同的驱动程序,并且决定使用所需的卡,这个解决方案才是好的.所以它太具体了,也许是不可预测的.
>在让驱动程序决定之前,更改代码中的驱动程序设置.
有了这个解决方案,在理论上可以让司机根据自己的需要做出决定,但很难,需要两张卡使用相同的驱动程序,并不总是可以工作(FX 1700 NVS 285不起作用).
>更改主屏幕.
这具有默认情况下在所选主屏幕中打开应用程序的效果.该解决方案仅适用于FX 1700 FX 570组合.使用FX 1700 FX 540,渲染器取决于驱动程序设置,与主屏幕无关,而对于FX 1700 NVS 285,渲染器始终为FX 1700.
>当窗口位于特定屏幕时创建OpenGL上下文.
窗口可以在所需的屏幕中创建,独立于主屏幕,但它与上述解决方案具有相同的问题.
>创建OpenGL上下文,只启用所需显卡中的屏幕,然后启用其他/.
这是我发现使用NVS 285作为渲染器的唯一方法,但它是丑陋的,我不知道它是否可自动化,或者在所有情况下都可以工作.
>尝试使用WGL_NV_gpu_affinity扩展名选择渲染GPU.
通过FX 1700和FX 570的组合,扩展报告将两个GPU兼容,我只能将渲染限制在其中一个.使用FX 1700 FX 540对,该扩展仅报告一个兼容的GPU,这是驱动程序决定用于OpenGL渲染的GPU.使用FX 1700 NVS 285组合,只会报告FX 1700,我想NVS 285不支持此扩展,因为如果它是唯一使用的卡,仍然不会被分机报告).

Windows 7 64与Intel和AMD

该系统使用Windows 7 64位,显卡是一个Intel HD Graphics 2000(集成在cpu(Sandy Bridge))和一个AMD Radeon HD 6450中.在所有情况下,渲染可在两个屏幕上工作,但渲染GPU变化取决于一些变量:

>如果主屏幕连接到AMD,并且在此屏幕中打开窗口,则AMD是渲染器.
>如果主屏幕连接到AMD,并且窗口在另一个屏幕上打开,则渲染器是“GDI泛型”,这是非常慢的.
>如果主屏幕连接到Intel,则Intel是渲染器,与窗口打开位置无关.

有了这个系统,我也试过a solution proposed in the OpenGL forums. TL; DR:选择OpenGL使用的驱动程序是一种很好的方法,所以它可以在使用不同驱动程序的GPU之间进行选择,但不能在使用相同驱动程序的卡之间进行选择.我取得了以下结果:

>如果主屏幕连接到AMD,我可以选择任何GPU作为渲染器.
>如果主屏幕连接到英特尔,我可以选择英特尔作为渲染器(无用的,因为这是自动的),但是如果我尝试选择AMD,我会收到一个错误;我认为这可能是驱动程序中的错误.

由于您使用nvidia Quadro卡,您可以使用 WGL_NV_gpu_affinity扩展来选择GPU.

我不确定ATI芯片,但我认为是AMD_gpu_association

猜你在找的Windows相关文章