# Nvidia Optimus

Nvidia Optimus is een technologie die dient voor het optimale gebruik van een afzonderlijke grafische kaart (GPU) met een op het moederbord geïntegreerde grafische kaart (IGP). Dit doet Optimus afhankelijk van de hoeveelheid grafische rekenkracht die gevraagd wordt door draaiende applicaties. Optimus maakt hierbij de keuze tussen maximale prestaties of minimaal stroomverbruik. Deze technologie is de verbeterde versie van “switchable graphics”.
Systemen die gebruikmaken van Optimus bevatten een minder presterende IGP van Intel (bv. Intel HD graphics) en een GPU van Nvidia. De GPU zal niet werken zolang deze niet nodig is. Er wordt dan gewerkt met de IGP. Deze bevindt zich in de processor en zal dus geen extra stroom verbruiken. Deze technologie is voornamelijk bedoeld voor laptops omdat de batterij gespaard wordt wanneer de GPU buiten werking (idle) is.
Optimus werkt momenteel in Windows 7, Windows 8 en Windows 8.1. Voor Linux-distributies is er een opensourceapplicatie genaamd Bumblebee die Optimus kan integreren.

## Geschiedenis

De laatste 10 jaar is de laptop-verkoop geëxplodeerd. De vraag naar prestaties van een laptop werd groter. Mensen willen op alle mogelijke plaatsen een film kunnen zien, gamen, documenten verwerken, fotoshoppen. Prestaties gaan meer en meer omhoog, maar dit gaat dan ten koste van batterijverbruik. GPU's zijn van groot belang in laptops die bedoeld zijn om prestaties te leveren.

### Switchable graphics

De PC industrie heeft lang gezocht naar de ideale laptop: een laptop met een lange batterijduur én hoge prestaties. Dit werd vaak een keuze tussen prestaties en batterijduur, maar niet de combinatie van beide.
Als eerste oplossing hiervoor kwam Nvidia in 2007 met switchable graphics. Deze kon wisselen tussen IGP en GPU in zo'n 5-10 seconden. Dit kon voor het eerst zonder de computer opnieuw te moeten opstarten, maar moest wel manueel gebeuren. De gebruiker kon dus zelf de keuze maken tussen een lange batterijduur of hoge prestaties.
Nadelen:
* Manueel van mode veranderen.
* Hoge overgangsperiode (5-10seconden of soms hoger)
* Draaiende programma's kunnen de switch blokkeren, dus alles moet eerst gesloten worden.
* Schermflikkeringen.
* Hogere kostprijs. Voor switchable graphics is meer digitale logica benodigd (multiplexers, display interfaces, ...).
Door deze problemen gingen gebruikers niet vaak wisselen en bleven ze meestal in dezelfde modus. Er was dus een betere oplossing nodig. Hieruit is Nvidia Optimus gekomen.

## Werking

Als een applicatie gestart wordt, zal Optimus bepalen of deze applicatie beter zou werken met de GPU. Als dit het geval is, zal deze GPU uit zijn idle state komen en voor alles ingezet worden. De IGP zal nochtans altijd het uiteindelijke beeld doorgeven. Alles passeert dus nog langs de IGP, maar de GPU doet het rekenwerk. Als applicaties gestart worden die niet veel grafische rekenkracht nodig hebben (webbrowser, documenten, ...), zal de IGP alleen werken. Zo is er minder batterijverbruik, en ook minder warmteproductie in de laptop waardoor de koeling minder nodig is. In Windows kan je manueel elk programma opstarten met de GPU door rechts te klikken op het opstarticoon.
Optimus kan dan opgedeeld worden in 2 categorieën:
* Optimus software
** Optimus routing
** Optimus profiles
* Optimus Hardware: Optimus Copy Engine

### Software

In Nvidia grafische kaarten zijn al veel opties om Optimus mogelijk te maken. Het software gedeelte zorgt er dan voor dat de overgang tussen de grafische kaarten ongemerkt en automatisch gebeurt.

#### Routing

In de hardware interface layer(HIL) van de driver, zorgt de Optimus Routing Layer voor de grafische controle. Ook bevat deze een library op kernel-niveau die bepaalde klassen en objecten kan herkennen, die geassocieerd zijn met bepaalde grafische toestellen. Zo kan voor elke applicatie beter bepaald worden welke hardware resources nodig zijn.
Door verschillende klassen te herkennen kan de Optimus Routing Layer meehelpen bij het bepalen wanneer de GPU geactiveerd moet worden. Het zal een signaal zenden om de GPU op te starten als het deze 3 typen van klassen tegenkomt:
* DX Calls: 3D game engines en DirectX applicaties zullen deze calls activeren.
* DXV A Calls: Voor video applicaties.
* CUDA Calls: Voor CUDA applicaties.

#### Profiel

Voor elke applicatie dat de GPU zal gebruiken, heeft Optimus een uniek Profiel. Deze profielen worden aangemaakt door Nvidia, nadat ze de applicatie enkele testen hebben laten ondergaan, om zo de beste kwaliteit te kunnen leveren voor deze applicatie. Deze profielen komen voor nieuwe applicaties uit op een webserver van Nvidia, en worden dan gepusht als updates. Deze updates kunnen kunnen uitgeschakeld worden in het Nvidia Control Panel.

### Hardware - Copy Engine

Om de software van Optimus te kunnen toepassen is er een nieuwe hardwarefunctie nodig, deze heet de Optimus Copy Engine. Er wordt geen gebruik gemaakt van een multiplexer, en er zijn geen flikkeringen meer op het scherm als we wisselen van IGP naar GPU.

## Linux Support: Bumblebee

Bumblebee is een open-source project dat helpt bij het overschakelen tussen de GPU en de IGP. De GPU kan dan geactiveerd worden vanaf de commandoregel of door geconfigureerde shortcuts. Dit kan nog niet automatisch gebeuren. Wel is er een grafische interface (bumblebee-ui) onderweg om het gemakkelijker te maken.