Jak instrukcje sterownika urządzenia programują procesor graficzny?

9

Powiedzmy, że mniej więcej używam komputera, każdego typowego współczesnego komputera. Sterownik urządzenia jest odpowiedzialny za wszystko, co widzę na ekranie, w tym także podczas pisania, ekran jest aktualizowany (jest to oczywiście w zakresie systemu operacyjnego, takiego jak Windows).

Spuśćmy to na poziom, na którym sprzęt nie dba o to, czy jest jądro, czy nie, i po prostu przyjmuje instrukcje.

Zasadniczo, w jaki sposób procesory graficzne „wiedzą” dokładnie, jak zrobić wszystko? Czy sterownik zasadniczo kontroluje każdą najmniejszą, wewnętrzną lub sprzętową funkcję na poziomie obwodu możliwą lub potrzebną do obliczenia danych binarnych do wyświetlania przy użyciu specjalnych instrukcji dostarczonych przez sterownik?

Jeśli tak, to czy GPU używa „specjalnego” języka lub „asemblera”, aby zrozumieć instrukcje wysyłane do niego tak jak procesor?

Mam zbyt wiele luk w mojej wiedzy, a za GPU kryje się ta nieprzyjemna „tajemnica” i bezpośredni dostęp do nich przez sprzęt.

Na przykład procesor graficzny i procesor muszą w jakiś sposób być w stanie się połączyć, aby można było uzyskać dostęp do procesora graficznego za pośrednictwem zespołu procesora i zaimplementowania prawidłowych magistrali danych / adresów. W żaden sposób dostawca urządzenia nie może uniemożliwić dostępu do GPU poza sterownikiem, ponieważ sterownik jest również skompilowanym kodem, a GPU, jako obwód programowalny, musi pracować z instrukcjami binarnymi.

Zadawałem tego rodzaju pytania, a one są gwałtownie usuwane szybko bez odpowiedzi na wielu stronach, więc jaka jest tutaj wielka tajemnica? Jest to element sprzętowy na płycie głównej, do którego można uzyskać dostęp jak każdy inny.

Więc naprawdę ... zakładając, że jest to „ok” pytanie dotyczące oprogramowania i sprzętu, każdy może uzyskać bezpośredni dostęp do GPU bez plików określonych przez producenta, ponieważ pliki nie są magiczne.

Jak więc „programuje się” układy GPU z bezpośredniej perspektywy sprzętowej na poziomie sprzętowym?


źródło
Określenie „OK”, pytanie wydaje się moim zdaniem (chociaż zawiłe i być może wymagając książkę Aby odpowiedzieć - co nie jest dobry format, więc najpierw zobaczyć w Centrum pomocy i wycieczek stron, aby stać się zapoznał z jakiego rodzaju pytania można zadać tutaj) .
Doktoro Reichard
Nie czytam centrum pomocy.
Mogę zapytać, dlaczego nie?
Doktoro Reichard
Ponieważ można poświęcić więcej czasu na zastanawianie się, próbowanie rozwiązania i odpowiedzi na moje pytanie „OK” w obecnej formie.
I jak powiedziałem, aby właściwie odpowiedzieć na to pytanie, prawdopodobnie potrzebowałbyś książki ... długie odpowiedzi nie są zwykle dobrymi odpowiedziami.
Doktoro Reichard

Odpowiedzi:

8

Zasadniczo, w jaki sposób procesory graficzne „wiedzą” dokładnie, jak zrobić wszystko? Czy sterownik zasadniczo kontroluje każdą najmniejszą, wewnętrzną lub sprzętową funkcję na poziomie obwodu możliwą lub potrzebną do obliczenia danych binarnych do wyświetlania przy użyciu specjalnych instrukcji dostarczonych przez sterownik?

Nie, urządzenie ma własne układy scalone, które kontrolują wszystkie aspekty funkcjonowania urządzenia na poziomie sprzętowym i współpracują z centralnym procesorem, który koordynuje aspekty na urządzeniu, a także zapewnia interfejs programowania wyższego poziomu, z którego można korzystać aby uzyskać dostęp, czytać, pisać i kontrolować urządzenie.

Jeśli tak, to czy GPU używa „specjalnego” języka lub „asemblera”, aby zrozumieć instrukcje wysyłane do niego tak jak procesor?

Tak i nie. Podobnie jak większość urządzeń, karty graficzne wykorzystują standardy w celu uproszczenia. Używają standardów takich jak VESA, aby uzyskać dostęp do zwykłych funkcji, takich jak wideo podczas uruchamiania, lub CUDA, aby uzyskać dostęp do funkcji programowania GPU. Ponadto programy mogą uzyskiwać dostęp do niestandardowych lub zależnych od urządzenia funkcji bezpośrednio przy użyciu kodu maszynowego (często C skompilowanego do asemblera) w połączeniu z dokumentacją programową urządzenia (dostępną na stronie internetowej adaptera).

Mam zbyt wiele luk w mojej wiedzy, a za GPU kryje się ta nieprzyjemna „tajemnica” i bezpośredni dostęp do nich przez sprzęt.

Sterowniki uzyskują bezpośredni dostęp do urządzenia, dlatego mają specjalny dostęp (zwykłe programy na poziomie użytkownika nie mają dostępu do sprzętu bezpośrednio w systemie Vista + ze względów bezpieczeństwa i stabilności). Dostęp do urządzenia za pomocą portów, DMA ( bezpośredni dostęp do pamięci ) i mapowanie pamięci .

Na przykład procesor graficzny i procesor muszą w jakiś sposób być w stanie się połączyć, aby można było uzyskać dostęp do procesora graficznego za pośrednictwem zespołu procesora i zaimplementowania prawidłowych magistrali danych / adresów. W żaden sposób dostawca urządzenia nie może uniemożliwić dostępu do GPU poza sterownikiem, ponieważ sterownik jest również skompilowanym kodem, a GPU, jako obwód programowalny, musi pracować z instrukcjami binarnymi.

Sterownik może odczytywać i zapisywać urządzenie za pomocą zwykłych instrukcji procesora, uzyskując dostęp do portów odwzorowanych w pamięci i tym podobnych. Jako łatwy do zrozumienia przykład możesz umieścić znak na ekranie w trybie tekstowym, pisząc do „pamięci” pod adresem B8000. Ten adres nie był pamięcią RAM, ale został zmapowany tak, aby odpowiadał pamięci karty graficznej, więc zapis na nim zapisałby na ekranie. Podobnie, możesz pisać na ekranie, umieszczając znak, który chcesz zapisać w ALrejestrze, 0x09w AHrejestrze, a następnie wywołując przerwanie systemu BIOS 0x10. Bardziej zaawansowane funkcje nie różnią się; możesz odczytywać i zapisywać pamięć adaptera, wywoływać funkcje na jego chipie i tak dalej, używając dowolnych interfejsów, które urządzenie udostępnia i dokumentuje.

Więc naprawdę ... zakładając, że jest to „ok” pytanie dotyczące oprogramowania i sprzętu, każdy może uzyskać bezpośredni dostęp do GPU bez plików określonych przez producenta, ponieważ pliki nie są magiczne.

Tylko w przypadku funkcji zgodnych ze standardami, ale wszystko inne (tj. Bardziej zaawansowane rzeczy), musisz zapoznać się z dokumentami programowymi producenta.

Jak więc „programuje się” układy GPU z bezpośredniej perspektywy sprzętowej na poziomie sprzętowym?

Przez wiele warstw:

  1. Elementy półprzewodnikowe, takie jak tranzystory i tym podobne
  2. Układy ASIC niskiego poziomu
  3. Wbudowane procesory i chipsety
  4. Interfejsy programowania niskiego poziomu (montaż)
  5. Interfejsy programowania wyższego poziomu (DirectX, OpenGL)
  6. Język programowania wysokiego poziomu (C ++, C #, Python itp.)
Synetech
źródło
1
uwaga na temat „goły metal”; w przypadku, gdy słyszysz o większości twórców gier, narzekają, że muszą używać abstrakcyjnych poziomów na wysokim poziomie, takich jak DirectX / OpenGL, zamiast pisać kod, który kompiluje się na komputerze z własnym językiem. zobacz tutaj, aby uzyskać informacje na temat języka asemblera używanego przez procesory graficzne FERMI firmy Nvidia code.google.com/p/asfermi zauważ, że nawet CUDA siedzi na szczycie języka wysokiego poziomu (PTX), który jest wkompilowany w kod maszynowy, więc programy, które programujesz w CUDA, mogą nie może być taki sam jak skompilowane wyjście.
Frank Thomas
Hej, czy możesz mieć dobrą propozycję książki dla studenta, która opisuje rzeczy, o których mówiłeś w tym poście? Nie jestem zainteresowany pracą w programowaniu GPU, ale luki w moim zrozumieniu tego, jak to wszystko działa, są frustrujące.
lanza
2

Nie jestem geniuszem w architekturze komputerowej, ale postaram się traktować twoje pytanie punktowo, zgodnie z moją najlepszą wiedzą.


Sterownik urządzenia jest odpowiedzialny za wszystko, co widzę na ekranie, w tym także podczas pisania, ekran jest aktualizowany (jest to oczywiście w zakresie systemu operacyjnego, takiego jak Windows).

To prawda, głównie dlatego, że bezpośrednia interakcja z GPU nie jest łatwa do wdrożenia. Stąd rozwój frameworków graficznych, takich jak DirectX i OpenGL.

Ta przydatna definicja z Wikipedii wyjaśnia to bardziej szczegółowo:

Sterownik urządzenia upraszcza programowanie, działając jako tłumacz między urządzeniem sprzętowym a aplikacjami lub systemami operacyjnymi, które go używają. Programiści mogą pisać kod aplikacji wyższego poziomu niezależnie od określonego sprzętu używanego przez użytkownika końcowego.


Zasadniczo, w jaki sposób procesory graficzne „wiedzą” dokładnie, jak zrobić wszystko? Czy sterownik zasadniczo kontroluje każdą najmniejszą, wewnętrzną lub sprzętową funkcję na poziomie obwodu możliwą lub potrzebną do obliczenia danych binarnych do wyświetlania przy użyciu specjalnych instrukcji dostarczonych przez sterownik?

Procesory graficzne to mikroprocesory. Jako takie przetwarzają. Przetwarzają dane, które są podawane z procesora (tj. Położenie elementów) do właściwego wyświetlania. „Wiedzą”, jak zrobić wszystko, ponieważ są wytwarzane w ten sposób, a duża grupa ludzi uzgodniła właściwe sposoby przesyłania danych do iz GPU.

Pomyśl o sterowniku ekranu jako o buforze lub serwerze proxy. Wyobraź sobie, że jesteś oknem programu, a użytkownik przesuwa cię w górę. Poprosisz GPU o odświeżenie wyświetlacza. Ale gdy GPU mówi Klingon, a ty mówisz po Vulcan , kierowca otrzymuje twoje polecenie, tłumaczy je na GPU, który z kolei robi to, co nakazałeś.

Jeśli tak, to czy GPU używa „specjalnego” języka lub „asemblera”, aby zrozumieć instrukcje wysyłane do niego tak jak procesor?


Z Wikipedii :

Język asemblera ARB jest językiem cieniowania niskiego poziomu, który można scharakteryzować jako język asemblera. Został stworzony przez OpenGL Architecture Review Board (ARB) w celu ujednolicenia instrukcji GPU sterujących potokiem grafiki sprzętowej.

Jest ten przykład i pamiętaj, że poszczególni producenci (NVIDIA, ATI) mają własne zestawy instrukcji.

Istnieje również OpenCL i wiele innych sposobów bezpośredniego programowania instrukcji do GPU.

Wszystko to do pewnego stopnia powinno odpowiedzieć na twoje pytanie.

Doktoro Reichard
źródło