Nvidia Optimus

Nvidia Optimus är en dator GPU-växlingsteknik skapad av Nvidia som, beroende på resursbelastningen som genereras av klientprogram, sömlöst växlar mellan två grafikadaptrar inom ett datorsystem för att ge antingen maximal prestanda eller minimalt strömförbrukning från systemets grafik rendering av hårdvara.

integrerad grafikprocessor med lägre prestanda från Intel / AMD och en högpresterande från Nvidia. Optimus sparar batteritid genom att automatiskt stänga av strömmen till den diskreta grafikprocessorn (GPU) när den inte behövs och slå på den när den behövs igen. Tekniken riktar sig främst till mobila datorer som bärbara datorer . När en applikation startas som är fast besluten att dra nytta av prestandan hos den diskreta GPU:n, startas den diskreta GPU:n och applikationen betjänas av en renderingskontext via den GPU:n. Annars betjänas applikationen av en renderingskontext som använder den integrerade GPU:n. Att växla mellan grafikprocessorerna är designat för att vara helt sömlöst och att ske "bakom kulisserna".

Officiellt stödda operativsystem av Nvidia är Microsoft Windows och Linux . Ett projekt som heter Bumblebee är en alternativ öppen källkodsimplementering av Optimus-stöd för Linux.

Drift

När en användare startar en applikation försöker grafikdrivrutinen avgöra om applikationen skulle dra nytta av den diskreta GPU:n. Om så är fallet, drivs GPU:n från ett viloläge och skickas igenom alla renderingsanrop. Även i detta fall används den integrerade grafikprocessorn (IGP) för att mata ut den slutliga bilden. När mindre krävande applikationer används tar IGP ensam kontroll, vilket möjliggör längre batteritid och mindre fläktljud. Under Windows ger Nvidia-drivrutinen också möjligheten att manuellt välja GPU i högerklicksmenyn när en körbar fil startas.

Inom hårdvarugränssnittslagret i Nvidia GPU-drivrutinen ger Optimus Routing Layer intelligent grafikhantering. Optimus Routing Layer innehåller också ett på kärnnivå för att känna igen och hantera specifika klasser och objekt associerade med olika grafikenheter. Denna Nvidia-innovation utför tillstånds- och kontexthantering och allokerar arkitektoniska resurser efter behov för varje drivrutinsklient (dvs. applikation). I detta sammanhangshanteringsschema är varje applikation inte medveten om andra applikationer som samtidigt använder GPU:n.

Genom att känna igen utsedda klasser kan Optimus Routing Layer hjälpa till att avgöra när GPU:n kan användas för att förbättra renderingsprestanda. Specifikt skickar den en signal för att slå på GPU:n när den hittar någon av följande tre samtalstyper:

  • DX-samtal: Alla 3D-spelmotorer eller DirectX -applikationer utlöser dessa samtal
  • DXVA -samtal: Videouppspelning utlöser dessa samtal (DXVA = DirectX Video Acceleration)
  • CUDA- anrop: CUDA-applikationer kommer att utlösa dessa samtal

Fördefinierade profiler hjälper också till att avgöra om extra grafikkraft behövs. Dessa kan hanteras med hjälp av Nvidias kontrollpanel.

Optimus undviker användning av en hårdvarumultiplexer och förhindrar fel som är förknippade med att byta bildskärmsdrivrutin från IGP till GPU genom att överföra bildskärmsytan från GPU- rambufferten över PCI Express-bussen till den huvudsakliga minnesbaserade rambufferten som används av IGP. Optimus Copy Engine är ett nytt alternativ till traditionella DMA- överföringar mellan GPU-framebufferminnet och huvudminnet som används av IGP.

Att använda IGP för att mata ut data från den diskreta GPU:n kan bli en flaskhals vid höga bildhastigheter. På stationära datorer eller spelbärbara datorer (där prestanda prioriteras framför energieffektivitet) har Optimus-tekniken kritiserats hårt. Vissa leverantörer har tillhandahållit hårdvarumultiplexerlösningar för att helt stänga av Optimus-arkitekturen. Operationen kan finnas i BIOS och kräver ofta en omstart.

Linux-stöd

I mitten den fria och öppen källkodsdrivrutinstacken bestående av Mesa 3D och libDRM i användarutrymme och DRM / KMS-drivrutin i Linux-kärnan. Nvidias proprietära kärnblob kan inte använda DMA BUF på grund av licensbegränsningar.

Den binära Nvidia-drivrutinen lade till partiellt Optimus-stöd 3 maj 2013 i 319.17. Från och med maj 2013 stöds inte strömhantering för diskreta kort, vilket innebär att det inte kan spara batteri genom att stänga av Nvidia-grafikkortet helt.

Det öppna källkodsprojektet Bumblebee försöker ge stöd för byte av grafikchip. Som i Windows-implementeringen körs alla applikationer som standard via den integrerade grafikprocessorn. Från och med 2013 kan man bara köra ett program med förbättrad grafisk prestanda på den diskreta GPU:n genom att uttryckligen anropa det som sådant: till exempel genom att använda kommandoraden eller genom en speciellt konfigurerad genvägsikon. Automatisk detektering och växling mellan grafikprocessorer är ännu inte tillgänglig.

Pågående arbete med ett grafiskt gränssnitt - bumblebee-ui - syftar till att möjliggöra mer bekväm start av program för förbättrad grafisk prestanda vid behov.

Steam för Linux kan ställas in för att köra spel med den diskreta grafikprocessorn ( Steam Community: Optimus och Steam för Linux) .

Bumblebee Project fortsätter att utvecklas i takt med att mer nödvändiga mjukvaruförändringar görs av grafikarkitekturen i Linux. För att få ut så mycket som möjligt av det är det bäst att använda en ny Linux-distribution. Från och med 2013 finns Bumblebee-programvaruförråd tillgängliga för Arch Linux , Debian , Fedora , Gentoo , Mandriva , OpenSuSE och Ubuntu . Källkodspaketet kan användas för andra distributioner.

Ett försök från Nvidia att stödja Optimus genom DMA BUF , en Linux-kärnmekanism för att dela buffertar över hårdvara (potentiellt GPU), avvisades av kärnutvecklare i januari 2012 på grund av licensinkompatibilitet mellan den GPL -licensierade kärnkoden och den proprietära- licensierad Nvidia blob .

När det inte finns någon mjukvarumekanism för att växla mellan grafikadaptrar kan systemet inte använda Nvidia GPU alls, även om en installerad grafikdrivrutin skulle stödja det.

Modern Optimus Support

Många Linux-distributioner stöder nu Nvidia-avlastning, där nvidia-kortet gör all rendering. Eftersom den interna bärbara skärmen är fysiskt ansluten till intel-drivrutinen, återges nvidia-kortet till intel-skärmens minne. För att undvika rivning har xorg-servern en mekanism som kallas Prime Synchronization för att tajma dessa buffertuppdateringar för att undvika rivning, liknande vsync; nvidia-drivrutinen måste laddas som en kärnmodul för att detta ska fungera. Detta är vanligtvis inte aktiverat som standard.

Till skillnad från bumblebee tillåter denna avlastningslösning grafik med flera skärmar. Nackdelen är att växling av nvidia-kortet kräver en utloggning.

Den ledande implementeringen av detta tillvägagångssätt är Ubuntus "prime-select"-paket, som har en kommandorad och ett grafiskt verktyg för att stänga av nvidia-kortet. Till skillnad från Windows görs detta inte dynamiskt, och användaren måste starta om inloggningssessionen för att ändringen ska träda i kraft.

Ubuntus prime-select-skript är tillgängligt på Ubuntu-derivat, som i vissa fall lägger till sina egna grafiska verktyg. Prime-offload-metoden har porterats eller återimplementerats i arch och fedora.

Under 2016 tillkännagav Nvidia GL Vendor Neutral Dispatch, vilket innebär att både Intel- och nvidia-drivrutiner kan installeras samtidigt. Detta har avsevärt förenklat processen att byta lägen, även om det dröjde till 2018 innan distributioner började dra nytta.

Vissa äldre och avancerade bärbara datorer innehåller en BIOS- inställning för att manuellt välja tillståndet för hårdvarumultiplexern för att växla utdata mellan de två videoenheterna. I det här fallet kan en Linux-användare placera den bärbara datorn i hårdvarukonfigurationer där det bara finns en grafikenhet. Detta undviker komplexiteten med att köra två grafikdrivrutiner, men ger inga energibesparingar.

Sedan drivrutinversion 435 stöder den proprietära drivrutinen rendering av ett enda fönster. Det skapar en virtuell skärm där dGPU:n renderas till, som kommer att visas i fönstret på huvudskärmen för avlastad applikation. Från och med oktober 2019 kräver detta användning av xorg-utvecklingsgrenen, eftersom nödvändiga ändringar ännu inte har släppts.

Se även

Anteckningar

externa länkar