Nvidii Optimus
Nvidia Optimus to komputerowa technologia przełączania procesorów graficznych stworzona przez Nvidię , która w zależności od obciążenia zasobów generowanych przez aplikacje klienckie, płynnie przełącza się między dwiema kartami graficznymi w systemie komputerowym, aby zapewnić maksymalną wydajność lub minimalny pobór mocy z grafiki systemu sprzęt do renderowania.
zintegrowany procesor graficzny o niższej wydajności firmy Intel / AMD , jak i wysokowydajny procesor Nvidii. Optimus oszczędza baterię, automatycznie wyłączając zasilanie oddzielnego procesora graficznego (GPU), gdy nie jest potrzebne, i włączając je ponownie, gdy jest potrzebne. Technologia jest skierowana głównie do komputerów przenośnych, takich jak notebooki . Gdy uruchamiana jest aplikacja, która ma korzystać z wydajności dyskretnego GPU, dyskretny GPU jest zasilany, a aplikacja jest obsługiwana przez kontekst renderowania za pośrednictwem tego GPU. W przeciwnym razie aplikacja jest obsługiwana przez kontekst renderowania korzystający ze zintegrowanego procesora graficznego. Przełączanie między procesorami graficznymi ma być całkowicie płynne i odbywać się „za kulisami”.
Oficjalne systemy operacyjne obsługiwane przez firmę Nvidia to Microsoft Windows i Linux . Projekt o nazwie Bumblebee to alternatywna open source obsługi Optimusa dla systemu Linux.
Operacja
Kiedy użytkownik uruchamia aplikację, sterownik karty graficznej próbuje określić, czy aplikacja skorzystałaby z dyskretnego procesora graficznego. Jeśli tak, GPU jest zasilany ze bezczynności i przechodzi wszystkie wywołania renderowania. Jednak nawet w tym przypadku do uzyskania ostatecznego obrazu używany jest zintegrowany procesor graficzny (IGP). Gdy używane są mniej wymagające aplikacje, IGP przejmuje wyłączną kontrolę, pozwalając na dłuższą żywotność baterii i cichszy wentylator. W systemie Windows sterownik Nvidia zapewnia również opcję ręcznego wyboru GPU w menu prawym przyciskiem myszy po uruchomieniu pliku wykonywalnego.
W warstwie interfejsu sprzętowego sterownika GPU Nvidia warstwa Optimus Routing Layer zapewnia inteligentne zarządzanie grafiką. Optimus Routing Layer zawiera również jądra do rozpoznawania i zarządzania określonymi klasami i obiektami powiązanymi z różnymi urządzeniami graficznymi. Ta innowacja firmy Nvidia zarządza stanem i kontekstem, przydzielając zasoby architektoniczne zgodnie z potrzebami dla każdego klienta sterownika (tj. aplikacji). W tym schemacie zarządzania kontekstem każda aplikacja nie jest świadoma innych aplikacji jednocześnie korzystających z GPU.
Rozpoznając wyznaczone klasy, Optimus Routing Layer może pomóc określić, kiedy GPU może być użyte do poprawy wydajności renderowania. W szczególności wysyła sygnał do włączenia GPU, gdy znajdzie jeden z następujących trzech typów wywołań:
- Wywołania DX: Dowolny silnik gry 3D lub aplikacja DirectX uruchomi te wywołania
- DXVA : odtwarzanie wideo uruchomi te połączenia (DXVA = DirectX Video Acceleration)
- CUDA : Aplikacje CUDA uruchomią te wywołania
Predefiniowane profile pomagają również określić, czy potrzebna jest dodatkowa moc graficzna. Można nimi zarządzać za pomocą panelu sterowania Nvidia.
Optimus unika użycia multipleksera sprzętowego i zapobiega usterkom związanym ze zmianą sterownika wyświetlacza z IGP na GPU, przesyłając powierzchnię wyświetlacza z bufora ramki GPU przez magistralę PCI Express do głównego bufora ramki opartego na pamięci, używanego przez IGP. Optimus Copy Engine to nowa alternatywa dla tradycyjnych DMA między pamięcią bufora ramki GPU a pamięcią główną używaną przez IGP.
Używanie protokołu IGP do wysyłania danych z oddzielnego procesora graficznego może stać się wąskim gardłem przy dużej liczbie klatek na sekundę. W przypadku laptopów zastępujących komputery stacjonarne lub laptopów do gier (gdzie wydajność ma wyższy priorytet niż efektywność energetyczna), technologia Optimus była mocno krytykowana. Niektórzy dostawcy dostarczają rozwiązania multiplekserów sprzętowych, aby całkowicie wyłączyć architekturę Optimus. Operacja może być hostowana w systemie BIOS i często wymaga ponownego uruchomienia.
Wsparcie dla Linuksa
Binarny sterownik Nvidia dodał częściową obsługę Optimusa 3 maja 2013 w wersji 319.17. Od maja 2013 r. zarządzanie energią dla oddzielnej karty nie jest obsługiwane, co oznacza, że nie można oszczędzać baterii przez całkowite wyłączenie karty graficznej Nvidia.
Projekt open source Bumblebee próbuje zapewnić obsługę przełączania układów graficznych. Podobnie jak w implementacji systemu Windows, domyślnie wszystkie aplikacje działają przez zintegrowany procesor graficzny. Od 2013 r. Program o ulepszonej wydajności graficznej można uruchomić tylko na dyskretnym GPU, wywołując go jako taki: na przykład za pomocą wiersza poleceń lub specjalnie skonfigurowanej ikony skrótu. Automatyczne wykrywanie i przełączanie między procesorami graficznymi nie jest jeszcze dostępne.
Trwają prace nad interfejsem graficznym - bumblebee-ui - mającym na celu umożliwienie wygodniejszego uruchamiania programów w celu poprawy wydajności graficznej w razie potrzeby.
Steam dla systemu Linux można skonfigurować do uruchamiania gier przy użyciu oddzielnego procesora graficznego ( Społeczność Steam: Optimus i Steam dla systemu Linux ).
Projekt Bumblebee wciąż ewoluuje, ponieważ w architekturze graficznej Linuksa wprowadzane są coraz bardziej niezbędne zmiany oprogramowania. Aby w pełni z niego korzystać, najlepiej jest korzystać z najnowszej dystrybucji Linuksa. Od 2013 roku repozytoria oprogramowania Bumblebee są dostępne dla Arch Linux , Debian , Fedora , Gentoo , Mandriva , OpenSuSE i Ubuntu . Pakiet źródłowy może być używany w innych dystrybucjach.
Podjęta przez Nvidię próba wsparcia Optimusa przez DMA BUF , mechanizm jądra Linuksa służący do współdzielenia buforów między sprzętem (potencjalnie GPU), została odrzucona przez programistów jądra w styczniu 2012 r. Z powodu niezgodności licencji między kodem jądra na licencji GPL a zastrzeżonym licencjonowany blob firmy Nvidia .
Gdy nie istnieje żaden programowy mechanizm przełączania między kartami graficznymi, system nie może w ogóle korzystać z procesora graficznego Nvidia, nawet jeśli zainstalowany sterownik graficzny by to obsługiwał.
Nowoczesna obsługa Optimusa
Wiele dystrybucji Linuksa obsługuje teraz odciążanie Nvidii, w którym karta nvidia wykonuje całe renderowanie. Ponieważ wewnętrzny wyświetlacz laptopa jest fizycznie podłączony do sterownika Intel, karta nvidia renderuje do pamięci wyświetlacza Intel. Aby uniknąć rozdarcia, serwer xorg ma mechanizm o nazwie Prime Synchronization, który określa czas aktualizacji bufora, aby uniknąć rozdzierania, podobnie jak vsync; aby to zadziałało, sterownik nvidia musi zostać załadowany jako moduł jądra. Zwykle nie jest to domyślnie włączone.
W przeciwieństwie do bumblebee, to rozwiązanie odciążające umożliwia wielomonitorową grafikę. Wadą jest to, że przełączenie karty nvidia wymaga wylogowania.
Wiodącą implementacją tego podejścia jest pakiet „prime-select” Ubuntu, który ma wiersz poleceń i narzędzie graficzne do wyłączania karty nvidia. W przeciwieństwie do systemu Windows nie odbywa się to dynamicznie, a użytkownik musi ponownie uruchomić sesję logowania, aby zmiana zaczęła obowiązywać.
Skrypt wyboru głównego Ubuntu jest dostępny w pochodnych Ubuntu, które w niektórych przypadkach dodają własne narzędzia graficzne. Podejście typu prime-offload zostało przeniesione lub ponownie zaimplementowane w arch i fedora.
W 2016 roku Nvidia ogłosiła GL Vendor Neutral Dispatch, co oznacza, że zarówno sterowniki intel, jak i nvidia mogą być instalowane jednocześnie. To znacznie uprościło proces przełączania trybów, chociaż dystrybucje zaczęły czerpać korzyści dopiero w 2018 roku.
Niektóre starsze i zaawansowane laptopy zawierają ustawienia systemu BIOS umożliwiające ręczne wybieranie stanu multipleksera sprzętowego w celu przełączania wyjścia między dwoma urządzeniami wideo. W takim przypadku użytkownik Linuksa może umieścić laptopa w konfiguracjach sprzętowych, w których występuje tylko jedno urządzenie graficzne. Pozwala to uniknąć złożoności uruchamiania dwóch sterowników graficznych, ale nie zapewnia oszczędności energii.
Od wersji sterownika 435 zastrzeżony sterownik obsługuje odciążanie renderowania pojedynczego okna. Tworzy wirtualny wyświetlacz, na którym renderuje dGPU, który będzie wyświetlany w oknie na ekranie głównym dla odciążonej aplikacji. Od października 2019 wymaga to użycia gałęzi programistycznej xorg, ponieważ potrzebne modyfikacje nie zostały jeszcze wydane.