Hoy en día, una gran cantidad de computadoras portátiles vienen con 2 GPU: una de alto rendimiento y una de bajo consumo (menos potente). La mayor parte de la aplicación, que uso en mi computadora portátil, se ejecuta con mi GPU integrada (de ahorro de energía), pero aún así algunas de ellas están configuradas para abrirse con la tarjeta de alto rendimiento. Estoy tratando de configurar la aplicación que estoy construyendo para ejecutarse en la GPU de alto rendimiento de forma predeterminada, pero no puedo encontrar ninguna información sobre el tema en ninguna parte. Espero que alguien pueda arrojar un poco de luz sobre esto. Distribuiré mi aplicación con un instalador NSIS y supongo que tendré que agregar la ruta de mi aplicación a una lista de aplicaciones para tarjetas NVidia / ATI. La aplicación está programada en C #. Además, ¿alguien sabe cómo están las cosas con las PC de escritorio? ¿Qué sucede si una PC tiene 2 GPU y tengo que elegir la más potente?
Milcho
NvOptimusEnablement
truco de Optimus , pero debería haberlo sabido . Parece que es algo reciente (controlador 302.x +) Gracias.En general, no puedes.
El controlador de doble GPU oculta las dos GPU detrás de una sola interfaz, por lo que las soluciones como las de Nathan Reed generalmente no funcionan en las configuraciones de GPU dual de alta velocidad / baja potencia más comunes.
La selección de GPU debe ser manejada por el controlador de alguna manera. Con NVIDIA Optimus, generalmente actualiza los perfiles Optimus para agregar la aplicación a la lista de aplicaciones que usan la GPU discreta, generalmente haciendo clic derecho en el EXE y haciendo clic en Propiedades. También puede usar algunas llamadas muy específicas a Optimus. según la respuesta de mh01. Con las configuraciones de AMD, esto es totalmente diferente.
En otros sistemas, hay un interruptor de hardware o un indicador del sistema operativo para decidir qué GPU está activa. Nuevamente, la aplicación no tiene control sobre qué GPU se usa.
Esto es algo que realmente espero que esté "arreglado" en una futura actualización de DirectX. Idealmente, ambas GPU se enumerarían como sugirió Nathan y luego habría indicios para indicar cuál de ellas está destinada a alta velocidad o baja potencia, por lo que una aplicación puede elegir de manera inteligente la correcta o incluso cambiar el dispositivo que usa en función de lo que sea factores (por ejemplo, dejar que un navegador web elija dependiendo de la carga de WebGL).
fuente
Debería poder enumerar las GPU en el sistema y elegir cuál usar cuando se inicia su aplicación. No mencionó qué API está utilizando, pero por ejemplo en D3D11 usaría IDXGIFactory :: EnumAdapters para obtener la lista de GPU y pasar la que desea a D3D11CreateDevice .
DXGI puede brindarle información limitada sobre la GPU, como una cadena de descripción, ID de proveedor e ID de dispositivo. Supongo que puede usar esta información para saber qué GPU es la de alto rendimiento, pero tendría que construir algún tipo de base de datos de GPU, o tratar de usar algunas heurísticas para adivinar. O puede dejar que el usuario elija qué GPU usar en el inicio.
fuente