opengl opencl optimus

opengl - Activar/desactivar Optimus/Enduro en forma de plataforma cruzada



opencl (0)

Para ahorrar energía, es común en arquitecturas gráficas recientes cambiar dinámicamente entre una GPU discreta de alto rendimiento y una integrada de menor rendimiento, donde la GPU de alto rendimiento solo se habilita cuando se necesita un rendimiento adicional.

Esta tecnología está marcada como nvidia Optimus y AMD Enduro para los dos principales proveedores de GPU.

Sin embargo, debido a la forma no estandarizada en que funcionan estas tecnologías, administrarlas desde la perspectiva de un desarrollador puede ser una pesadilla. Por ejemplo, en este PDF de nvidia sobre el tema, explican las numerosas complejidades, limitaciones y trampas de las que tendrá que preocuparse como desarrollador para administrar nvidia Optimus en una sola plataforma.

Como ejemplo, en el PDF vinculado anteriormente, lo siguiente es un consejo para seleccionar GPU en Windows:

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

Sin embargo, eso solo funcionará para las GPU nvidia en la plataforma Windows. ¿Cuál sería el equivalente de AMD / Intel en OSX / Linux y en el hardware de AMD?

Entonces, con más detalle mi pregunta es, ¿cómo puedo

  1. ¿Detecta la presencia de Optimus / Enduro y posiblemente otras arquitecturas de GPU de conmutación dinámica mediante programación?
  2. Seleccione cuál de las GPU debe habilitarse programáticamente?
  3. ¿Lo hace de una manera multiplataforma sobre todas las plataformas relevantes?
  4. ¿Lo hace de una manera que funcione junto con todas las tecnologías que podrían usar GPU como DX / OpenGL / Vulkan / OpenCL / CUDA / Qt?

Estoy trabajando con la base de código C ++ 14 / Qt5.7 bajo Ubuntu 16.04-amd64 usando hardware nVidia.