Wou*_*orf 19 windows opengl multiple-monitors multi-gpu
我有一个OpenGL应用程序,可以在具有多种多GPU配置的机器上运行(可能还有不同的Windows版本,从XP到7).是否有一般方法可以选择独立于GPU组合的OpenGL渲染器的特定GPU(例如NVIDIA + NVIDIA,NVIDIA + AMD,NVIDIA + Intel等)?它必须是可以从应用程序代码应用的解决方案,即直接在C++或将从应用程序调用的脚本,而无需最终用户干预.
以下是我尝试寻找解决方案的几项测试的详细信息,从非常具体的案例开始,但也许有一个解决方案可以在所有或大多数情况下工作.
是否有任何可靠的方法来强制哪些GPU进行OpenGL渲染?
任何提示都将非常感激.提前致谢!
使用两个Quadro卡组合进行测试
在Windows XP 64位下使用相同的驱动程序(版本275.36),我在各种方法上取得了相对成功,例如:
让司机决定.
只要两张卡使用相同的驱动程序并决定使用所需的卡,此解决方案就是好的.所以它太具体,可能无法预测.
在让司机决定之前,使用NVAPI更改代码中的驱动程序设置.
有了这个解决方案,理论上可以让驱动程序按我的意愿决定,但很难,需要两张卡使用相同的驱动程序而且并不总是有效(使用FX 1700 + NVS 285它不起作用).
更改主屏幕.
这具有默认情况下应用程序在所选主屏幕中打开的效果.该解决方案仅与FX 1700 + FX 570组合一起使用.使用FX 1700 + FX 540,渲染器取决于驱动程序设置,独立于主屏幕,而FX 1700 + NVS 285渲染器始终为FX 1700.
当窗口在特定屏幕中时创建OpenGL上下文.
窗口可以在所需的屏幕中创建,独立于主屏幕,但它具有与上述解决方案相同的问题.
创建OpenGL上下文,仅启用所需图形卡中的屏幕,然后启用其他/ s.
这是我发现使用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 HD Graphics 2000(集成在CPU(Sandy Bridge)中)和一个AMD Radeon HD 6450.在所有情况下,渲染都适用于两个屏幕,但渲染GPU不同取决于一些变量:
有了这个系统,我也尝试了在OpenGL论坛中提出的解决方案.TL; DR:这是一种选择OpenGL使用的驱动程序的hacky方法,因此它可以在使用不同驱动程序的GPU之间进行选择,但不能在使用相同驱动程序的卡之间进行选择.我获得了以下结果:
归档时间: |
|
查看次数: |
4118 次 |
最近记录: |