我可以在 OpenGL 中使用不同的 multiGPU 吗?

Bap*_*api 2 opengl blender display

我阅读了有关OpenGL 多 GPU 支持的信息。我目前正在使用支持 OpenGL 4.5 的 nvidia 卡。我的 iGPU 是 intel HD 610,我不知道它的 openGL 版本。现在我尝试将两者结合使用。我知道 DirectX 12 可以支持不同的 GPU。OpenGL 是否同时支持 intel iGPU 和 Nvidia GPU?我可以将 iGPU 端口用于我的显示器并在搅拌机中使用 Nvidia 卡进行循环渲染吗?最后一个很重要,因为我的显示器只支持 VGA。

gkv*_*311 5

OpenGL 是很久以前设计的,因此采用此 API 来处理多个 GPU 设备存在问题。与 OpenCL 或 Vulkan 不同,它们从一开始就具有选择系统中可用的设备/驱动程序的一些基本含义,而 OpenGL(或具体而言——将 OpenGL 绑定到窗口系统的 WGL、GLX、EGL 接口)没有任何——操作系统完全负责使用不明确的逻辑选择驱动程序。

OpenGL 实际提供的功能:

  • 同一 OpenGL 驱动程序中的GPU 关联/选择(WGL_AMD_gpu_associationWGL_NV_gpu_affinity)。这允许管理同一供应商 GeForce+GeForce 或 Radeon+Radeon(包括后一种情况下的 iGPU)的 GPU 串联,但不能管理不同供应商的 GPU。Linux 上的 MESA 驱动程序也支持GLX_MESA_query_renderer扩展,但到目前为止它只允许列出系统中所有可用的渲染器,而不是选择特定的渲染器。
  • iGPU+离散串联中的首选GPU。特定的 Intel+GeForce 串联提供驱动程序设置(通常在 NVIDIA 控制面板中),允许通过特定应用程序使用 iGPU 或 GeForce。应用程序也可能使用技巧(如在 DLL 中导出符号)要求驱动程序更喜欢离散 GPU 而不是 iGPU。无法在同一应用程序中同时使用两个 GPU。另请注意,这仅适用于具有特殊 Intel+NVIDIA 驱动程序的笔记本电脑,不适用于普通台式机配置。
  • 其他多 GPU(桌面)配置中的活动 GPU。操作系统完全负责使用不明确的逻辑来选择驱动程序。在交互式会话中,Windows 根据物理连接的 GPU 主显示器决定加载哪个 OpenGL 驱动程序(以前,在某处声明,窗口位置改变了此逻辑,但现代 Windows 系统似乎不再如此)。在 RDP 会话中,逻辑不清楚且不可配置 - 它以某种方式由 PCI-E 插槽中的 GPU 顺序确定;选择某些 GPU 的唯一方法是在设备管理器中禁用所有其他 GPU。

在任何情况下,即使在支持此功能的 API 中使用多个 GPU,也是相当复杂的事情,需要应用程序开发人员付出大量努力:管理多个设备、重复内存管理、拆分渲染视口、平衡和同步。并且即使在最好的情况下,对于 2 个相同的 GPU,其收益也将远低于 2 倍,因为渲染管道的一部分必须在两个 GPU 上进行处理(例如此视频中关于 VR 渲染器的阴影渲染- 因此 2 个 GPU 仅提供 30 -35% 性能提升)。

同时,在多 GPU 配置中使用不相等的 GPU 是更令人头疼的问题——由于额外的平衡问题,以及不一致的 GPU(驱动程序)能力。在 Intel iGPU + Discrete GPU 串联中,第一个不仅速度较慢,而且在 OpenGL 核心版本或扩展方面的能力也较低。尽管如此,AMD 已经展示了一些具有一定性能提升的多 GPU iGPU+离散 GPU 设置。