我读到OpenGL 多 GPU 支持 https://stackoverflow.com/questions/43811699/opengl-multi-gpu-support。我目前使用的是支持 OpenGL 4.5 的 NVIDIA 卡。我的 iGPU 是 Intel HD 610,我不知道它的 openGL 版本。现在我尝试将两者一起使用。我知道 DirectX 12 可以支持不同的 GPU。 OpenGL 是否同时支持 Intel iGPU 和 NVIDIA GPU?我可以在显示器上使用 iGPU 端口并在搅拌机中使用 NVIDIA 卡进行循环渲染吗? (最后一点很重要,因为我的显示器仅支持 VGA。)
OpenGL 的设计已经很久了,因此采用该 API 来处理多个 GPU 设备是有问题的。与 OpenCL 或 Vulkan 不同,OpenCL 或 Vulkan 从一开始就具有选择系统中可用的设备/驱动程序的一些基本含义,OpenGL(或特别是 - 将 OpenGL 绑定到窗口系统的 WGL、GLX、EGL 接口)没有任何 - 操作系统完全负责使用不明确的逻辑来选择驱动程序。
OpenGL实际上提供了什么:
-
GPU亲和力/在同一 OpenGL 驱动程序中选择(WGL_AMD_gpu_关联 https://www.khronos.org/registry/OpenGL/extensions/AMD/WGL_AMD_gpu_association.txt and WGL_NV_gpu_affinity https://www.khronos.org/registry/OpenGL/extensions/NV/WGL_NV_gpu_affinity.txt)。这允许管理同一供应商的 GeForce+GeForce 或 Radeon+Radeon(包括后一种情况下的 iGPU)的 GPU 串联,但不能管理不同供应商的 GPU。 Linux 上的 MESA 驱动程序还支持GLX_MESA_query_renderer https://registry.khronos.org/OpenGL/extensions/MESA/GLX_MESA_query_renderer.txt扩展,但到目前为止它只允许列出系统中所有可用的渲染器,而不能选择特定的渲染器。
-
首选 GPUiGPU+离散串联。特定的 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 上处理(例如在这个视频 https://youtu.be/eIlb688pUu4?t=599关于 VR 渲染器 - 因此 2 个 GPU 仅提供 30-35% 的性能提升)。
与此同时,由于额外的平衡问题以及不一致的 GPU(驱动程序)功能,在多 GPU 配置中使用不同的 GPU 更加令人头疼。在英特尔 iGPU + 离散 GPU 串联中,第一个不仅速度较慢,而且在 OpenGL 核心版本或扩展方面的能力较低。尽管如此,AMD 已经展示了一些多 GPU iGPU+独立 GPU 设置,这些设置具有一定的性能提升。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)