# Nvidia Optimus

Nvidia Optimus es una tecnología creada por Nvidia Corporation para notebooks con dos chips gráficos, que consiste en cambiar entre los dos adaptadores gráficos transparentemente mediante software, con el fin de ofrecer mayor rendimiento en aplicaciones gráficas exigentes y tener menor consumo de energía. Esta tecnología tiene su homólogo en AMD llamado PowerXpress, y es una implementación particular de lo que es comúnmente conocido como “gráficos intercambiables”, en inglés “GPU switching”.
El sistema de Optimus comprende un chip gráfico integrado de bajo consumo energético y menor rendimiento de Intel (usualmente las nuevas GPU Intel están integrados en la misma CPU en los modelos Core i3, i5 e i7) y otra GPU dedicada Nvidia de alto rendimiento. Optimus ahorra tiempo de batería desactivando (o apagando) la GPU de alto rendimiento cuando ésta no se está usando, y cuando sea necesario usarla se vuelve a activar. Cuando la GPU dedicada es apagada, el control de los gráficos se redirige a la GPU integrada.
Oficialmente son soportados por Nvidia los sistemas operativos Windows y los sistemas operativos basados en Linux (soporte parcial en desarrollo). También existe soporte de código abierto para Optimus en Linux dado por Bumblebee.

## Funcionamiento

Cuando el usuario lanza una aplicación, el controlador gráfico trata de determinar si la aplicación se beneficiaría con la GPU dedicada. Si es así, la GPU en estado de inactividad se enciende y se pasan todas las llamadas de renderizado. Sin embargo, incluso en este caso el procesador gráfico integrado (IGP) se utiliza para generar la imagen final. Cuando se ejecutan aplicaciones menos exigentes, el IGP toma el control exclusivo del procesamiento de gráficos, lo que permite mayor duración de batería y menos ruido del ventilador. En Windows el controlador Nvidia también proporciona la opción para seleccionar manualmente la GPU con la cual ejecutar una aplicación mediante un sub-menú con el clic derecho del ratón.
Dentro de la capa de interfaz de hardware del controlador de la GPU NVIDIA, la capa de enrutamiento de Optimus provee una gestión inteligente de gráficos. La capa de enrutamiento de Optimus también incluye una biblioteca de nivel de kernel para el reconocimiento y administración de clases específicas y objetos asociados con diferentes dispositivos gráficos. Esta tecnología lleva a cabo el estado y la gestión del contexto, asignando recursos arquitectónicos como sea necesario para cada cliente del controlador (es decir, la aplicación). En este esquema de gestión de contexto, cada aplicación no es consciente de que otras aplicaciones estén usando la GPU al mismo tiempo.
Mediante el reconocimiento de clases designadas, la capa de enrutamiento de Optimus puede ayudar a determinar cuando la GPU puede ser utilizada para mejorar el rendimiento de renderizado de gráficos. Específicamente envía una señal para encender la GPU dedicada cuando encuentra una de los siguientes tres tipos de llamadas en el sistema:
* Llamadas DX: Cualquier motor de juegos 3D o aplicación DirectX desencadenará estas llamadas
* Llamadas DXVA: La reproducción de vídeo desencadenará estas llamadas (DXVA = DirectX Video Acceleration)
* Llamadas CUDA: Aplicaciones CUDA desencadenarán estas llamadas
El uso de perfiles predefinidos también ayuda a determinar si es necesaria mayor potencia gráfica. Estos perfiles pueden ser administrados usando el panel de control de Nvidia.
Optimus evita el uso de un multiplexor de hardware y evita problemas técnicos asociados con el cambio del controlador gráfico desde la IGP a la GPU mediante la transferencia de la representación en pantalla desde el framebuffer de la GPU a través del bus PCI Express hacia el framebuffer basado en la memoria principal usado por la IGP. El motor de copia de Optimus es una nueva alternativa a las tradicionales transferencias DMA entre la memoria de framebuffer de la GPU y la memoria principal utilizada por la IGP.

## Soporte

Oficialmente esta tecnología es soportada por Windows 7 y versiones posteriores; y desde la versión del controlador de Nvidia 319.12 también es soportada por sistemas operativos GNU/Linux. Aparte del soporte de hardware con los controladores de sistema, en la versión de Windows también se provee de un panel de control en el cual es posible configurar con cuál procesador gráfico se puede ejecutar ciertas aplicaciones, así como obtener ajustes predefinidos optimizados para videojuegos y aplicaciones 3D que se descargan automáticamente del sitio de Nvidia.

### Soporte para Linux

Cuando no hay un mecanismo de software para cambiar entre adaptadores de gráficos, la GPU NVIDIA no puede utilizarse en absoluto, incluso si un controlador gráfico instalado lo soportara. Algunas computadoras antiguas contienen una opción en la BIOS para seleccionar manualmente el estado del multiplexor de hardware para cambiar las salidas entre los dos dispositivos de video. Sin embargo, esta opción ya no es parte de la plataforma Optimus.

#### Controlador Nvidia oficial

El controlador binario de Nvidia añadió el soporte de Optimus en Linux en su controlador 319.12 beta, el 9 de abril de 2013.

#### Linux y el proyecto Bumblebee: una solución de código abierto

En Linux ha habido varios proyectos con el objetivo de dar soporte nativo a Optimus, entre ellos Ironhide, Bumblebee y PRIME. Ironhide es la continuación del antiguo proyecto Bumblebee de Martin Juhl, con la intención de soportar solamente a Ubuntu. Este proyecto está aparentemente inactivo.
El proyecto de código abierto Bumblebee intenta dar soporte para los gráficos intercambiables. Tal como la implementación de Windows, por defecto todas las aplicaciones se ejecutan por medio de la IGP. Pero a diferencia de la situación de Windows, en la que automáticamente se detecta mediante software cuándo es necesario ejecutar una aplicación con la GPU dedicada, actualmente la única manera de ejecutar un programa con rendimiento gráfico mejorado en la GPU dedicada es invocándola explícitamente como tal. Esto puede ser hecho, por ejemplo, usando la línea de comandos o por medio de íconos de acceso directo especialmente configurados. La detección e intercambio entre procesadores de manera automática aún no está disponible.
También hay un trabajo en curso en una interfaz gráfica para permitir un arranque más conveniente de programas con rendimiento gráfico mejorado cuando es necesario. Actualmente es llamado bumblebee-ui.
Se concibe a Bumblebee como una solución de código abierto a corto y mediano plazo, mientras que se ve a PRIME como una solución estable a largo plazo para el soporte de gráficos híbridos bajo Linux.