2

为了节省功耗,在最近的图形架构中通常会在离散的高性能和集成的低性能 GPU 之间动态切换,其中高性能 GPU 仅在需要额外性能时才启用。

对于两家主要的 GPU 供应商,这项技术被称为nvidia OptimusAMD Enduro 。

然而,由于这些技术工作的非标准化方式,从开发人员的角度管理它们可能是一场噩梦。例如,在这个来自 nvidia 的 PDF中,他们解释了作为开发人员在一个平台上管理 nvidia Optimus 时必须担心的许多复杂性、限制和陷阱。

例如,在上面链接的 PDF 中,以下是在 Windows 上选择 GPU 的提示:

extern "C" {
 _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
}

但是,这只适用于 Windows 平台上的 nvidia GPU。在 OSX/Linux 和 AMD 硬件上,AMD/Intel 的等价物是什么?

所以更详细地说,我的问题是,我怎么能

  1. 以编程方式检测 Optimus/Enduro 以及可能的其他动态 = 切换 GPU 架构的存在?
  2. 选择应该以编程方式启用哪些 GPU?
  3. 以在所有相关平台上跨平台的方式这样做?
  4. 以一种与所有可能使用 GPU 的技术(例如 DX/OpenGL/Vulkan/OpenCL/CUDA/Qt)协同工作的方式来执行此操作?

我正在使用 nVidia 硬件在 Ubuntu 16.04-amd64 下使用 C++14/Qt5.7 代码库。

4

0 回答 0