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?
Odpowiedzi:
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.
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).
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 .
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
AL
rejestrze,0x09
wAH
rejestrze, a następnie wywołując przerwanie systemu BIOS0x10
. 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.Tylko w przypadku funkcji zgodnych ze standardami, ale wszystko inne (tj. Bardziej zaawansowane rzeczy), musisz zapoznać się z dokumentami programowymi producenta.
Przez wiele warstw:
źródło
Nie jestem geniuszem w architekturze komputerowej, ale postaram się traktować twoje pytanie punktowo, zgodnie z moją najlepszą wiedzą.
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:
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ś.
Z Wikipedii :
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.
źródło