opengl - 以跨平台方式啟用/禁用Optimus/Enduro



opencl (0)

為了節省電力,最近的圖形體系結構中很常見的是在分立的高性能GPU和集成的低性能GPU之間進行動態切換,其中高性能GPU僅在需要額外性能時才能使用。

這項技術被稱為nvidia擎天柱AMD耐力兩個主要的GPU供應商。

然而,由於這些技術的非標準化方式,從開發人員的角度來管理它們可能是一個噩夢。 例如,在這個由nvidia提供的關於這個主題的PDF中 ,他們解釋了許多錯綜複雜,局限性和陷阱,作為開發者在一個平台上管理nvidia Optimus,你將不得不擔心。

例如,在上面的鏈接PDF中,以下是在Windows上選擇GPU的技巧:

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

不過這只適用於Windows平台上的nvidia GPU。 AMD / Intel在OSX / Linux和AMD硬件上的等價物是什麼?

所以更詳細的我的問題是,我怎麼能

  1. 通過編程檢測Optimus / Enduro和其他動態=切換GPU架構的存在嗎?
  2. 選擇以編程方式啟用哪個GPU?
  3. 在所有相關平台上以跨平台的方式進行操作?
  4. 與DX / OpenGL / Vulkan / OpenCL / CUDA / Qt等所有可能使用GPU的技術一起使用。

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