Estoy programando un juego DirectX, y cuando lo ejecuto en una computadora portátil Optimus se usa la GPU Intel, lo que resulta en un rendimiento horrible. Si fuerzo la GPU de NVIDIA usando el menú contextual o cambiando el nombre de mi ejecutable a bf3.exe o algún otro nombre ejecutable de juego famoso, el rendimiento es el esperado.
Obviamente, tampoco es una solución aceptable para cuando tengo que redistribuir mi juego, entonces ¿hay alguna manera de obligar programáticamente a la computadora portátil a utilizar la GPU NVIDIA?
Ya he intentado usar DirectX para enumerar adaptadores (IDirect3D9 :: GetAdapterCount, IDirect3D9 :: GetAdapterIdentifier) y no funciona: solo se informa 1 GPU (el que está en uso).Forzar la GPU de NVIDIA mediante programación en las computadoras portátiles Optimus
Respuesta
El documento técnico de Optimus en http://www.nvidia.com/object/LO_optimus_whitepapers.html no está claro exactamente qué se necesita antes de realizar un cambio a la GPU. El documento técnico dice que las llamadas DX, DXVA y CUDA se detectan y harán que se encienda la GPU. Pero además, la decisión se basa en los perfiles mantenidos por NVIDIA y, por supuesto, todavía no existe uno para su juego.
Una cosa para intentar sería hacer una llamada CUDA, por ejemplo al cuInit(0);
. A diferencia de DX y DXVA, no hay forma de que los gráficos integrados de Intel manejen eso, por lo que debe forzar un cambio a la GPU.
Según http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf empezando desde 302 conductores es suficiente para enlazar estáticamente con una de las siguientes bibliotecas: vcamp110.dll, vcamp110d.dll, nvapi.dll, nvapi64.dll, OpenCL . .dll, nvcuda.dll, cudart * *, o exportar una variable NvOptimusEnablement en su programa:
extern "C" {
_declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
}
+1 para la variable de habilitación (y el enlace correspondiente); Nota: No funcionó para mi 310-driver, pero funcionó después de la actualización a 320 – NobodysNightmare
Debe tenerse en cuenta que la configuración del procesador de gráficos preferido en el panel de control NVIDIA debe configurarse en "Auto-select" para que esto funcione. – Nathan
Esto ya no funciona (GTX 960M - driver v385.41) – Matthias
- 1. Acelerómetro API para computadoras portátiles
- 2. ¿Alternativa a nvidia-smi para medir la utilización de GPU?
- 3. Cómo forzar que ListView muestre la primera página mediante programación
- 4. Programación de la GPU de Java
- 5. Introducción a la programación de GPU
- 6. ¿Hay alguna manera de probar mediante programación la aceleración de la GPU del navegador?
- 7. Nvidia Tesla vs 480 para programación CUDA
- 8. Modo de cálculo exclusivo con OpenCL + NVidia
- 9. Extraiga las tablas en PDF mediante programación
- 10. Programación funcional pura para la GPU
- 11. Programación de GPU en Xbox 360
- 12. ¿Dónde reside el código del núcleo de Cuda en la GPU nvidia?
- 13. ¿Cómo se calcula la carga en una tarjeta nvidia (compatible con cuda), gpu?
- 14. ha podido recuperar la programación de utilización de la GPU
- 15. ¿Qué son los "números mágicos" en la programación de computadoras?
- 16. No se puede matar el kernel defectuoso que se ejecuta en la GPU NVIDIA
- 17. ¿Cómo se resuelven los problemas cambiantes de CGDirectDisplayID en las nuevas portátiles Apple de varias GPU en Core Foundation/IO Kit?
- 18. Rutas relativas para portátiles portátiles en mathematica
- 19. ¿Hay protección de memoria en las GPU
- 20. La interceptación de la tecla Fn en los ordenadores portátiles
- 21. Cambiar las propiedades de la etiqueta mediante programación
- 22. mediante programación en C#
- 23. Encender la pantalla mediante programación
- 24. instalación de Cuda NVIDIA Graphic Driver failed
- 25. Deshabilitar la atenuación de la pantalla del sensor de luz ambiental mediante programación en OS X
- 26. API de roscado portátiles
- 27. Apache, PHP y MySQL portátiles?
- 28. ¿Los sombreadores OpenGL están compilados en la GPU o la CPU? ¿Cómo varía la salida binaria por fabricante de la GPU?
- 29. Determine la velocidad en Internet mediante programación
- 30. Hacer clic mediante programación en las vistas en android
¿Alguien tuvo éxito real con este método? Intenté llamar a 'cuInit' antes de crear mi contexto OpenGL, y obtuve un contexto Intel no uno de NVidia. – rotoglup
@rotoglup: Indíquenos qué SO está ejecutando y, si encuentra una solución, agréguela como respuesta a esta pregunta. –
Estoy ejecutando los controladores Win7 home x64 SP1 + NVidia 296.16. No tengo ni idea de cómo proceder: la [Guía del desarrollador NVIDIA CUDA para plataformas NVIDIA Optimus] (http://developer.download.nvidia.com/compute/cuda/docs/CUDA_Developer_Guide_for_Optimus_Platforms.pdf) doc menciona que vincular un OpenGL contexto para CUDA no funciona en las plataformas Optimus, dice que esto requiere un "perfil de aplicación" en el Panel de control de NVidia ... Tal vez NVAPI permite crear dicho perfil de manera programática, pero el sitio web de desarrolladores de NVidia está caído. – rotoglup