Jak GPU / CPU komunikuje się ze standardowym wyjściem wyświetlacza? (HDMI / DVI / itp.) [Zamknięte]

14

Interesuje mnie, w jaki sposób procesor / GPU prezentuje (na jakimkolwiek sprzęcie, który robi) dane wideo po przetworzeniu.

Powiedziano mi, że wideo jest przetwarzane przez CPU / GPU, a następnie przesyłane do układu scalonego przez szybki szeregowy, który konwertuje sygnał szeregowy na odpowiednie wyjście, ale nie mogę tego potwierdzić, wyszukując online.

Jestem zainteresowany sygnalizacją i nie mogę wyszukiwać protokołów / etc, ponieważ nie wiem, czego szukam. Więc czy CPU / GPU oddziałuje bezpośrednio z wyjściami wideo (mogę łatwo znaleźć te protokoły), czy jest „pośrednik”, że tak powiem, a jeśli tak, to co to jest, typ układu / etc?

Craig Lafferty
źródło
Możesz kupić RAMDAC wideo jako odrębne części: ti.com.cn/cn/lit/ds/symlink/tvp3703.pdf, ale to nie znaczy, że będzie osobno na twojej karcie graficznej.
pjc50

Odpowiedzi:

18

Obraz wyświetlany na monitorze jest przechowywany w pamięci RAM wideo komputera na karcie graficznej w strukturze zwanej buforem klatek. Dane w buforze ramki mają na ogół 24-bitowy kolor RGB, więc dla każdego piksela na wyświetlaczu będzie jeden bajt dla koloru czerwonego i jeden dla koloru niebieskiego, ewentualnie z dodatkowymi bajtami wypełnienia. Dane w pamięci RAM wideo mogą być generowane przez GPU lub CPU. Pamięć RAM wideo jest stale odczytywana przez wyspecjalizowany komponent DMA na karcie graficznej i wysyłana do monitora. Sygnał wyjściowy do monitora jest albo sygnałem analogowym (VGA), w którym komponenty kolorów są przesyłane przez konwertery cyfrowo-analogowe przed wyjściem z karty, albo sygnałem cyfrowym w przypadku DVI, HDMI lub DisplayPort. Sprzęt odpowiedzialny za to generuje również sygnały synchronizacji poziomej i pionowej, a także wszystkie odpowiednie opóźnienia, więc dane obrazu są wysyłane do monitora tylko wtedy, gdy jest na to gotowy. W DVI i HDMI strumień informacji o kolorze pikseli jest kodowany i serializowany oraz wysyłany za pośrednictwem TMDS (minimalizacja różnicowa sygnalizacji różnicowej) do monitora. DisplayPort wykorzystuje kodowanie 8b / 10b. Kodowanie służy wielu celom. Po pierwsze, TMDS minimalizuje przejścia sygnałów w celu zmniejszenia emisji EMI. Po drugie, zarówno TMDS, jak i 8b / 10b są protokołami symetrycznymi dla prądu stałego, więc kondensatory blokujące prąd stały można wykorzystać do wyeliminowania problemów z pętlami uziemienia. Po trzecie, 8b / 10b zapewnia wystarczająco wysoką gęstość przejścia, aby umożliwić odzyskanie zegara w odbiorniku, ponieważ DisplayPort nie rozdziela osobnego zegara. strumień informacji o kolorze pikseli jest kodowany i serializowany, a następnie wysyłany do monitora za pośrednictwem TMDS (minimalna przejściowa sygnalizacja różnicowa). DisplayPort wykorzystuje kodowanie 8b / 10b. Kodowanie służy wielu celom. Po pierwsze, TMDS minimalizuje przejścia sygnałów w celu zmniejszenia emisji EMI. Po drugie, zarówno TMDS, jak i 8b / 10b są protokołami symetrycznymi dla prądu stałego, więc kondensatory blokujące prąd stały można wykorzystać do wyeliminowania problemów z pętlami uziemienia. Po trzecie, 8b / 10b zapewnia wystarczająco wysoką gęstość przejścia, aby umożliwić odzyskanie zegara w odbiorniku, ponieważ DisplayPort nie rozdziela osobnego zegara. strumień informacji o kolorze pikseli jest kodowany i serializowany, a następnie wysyłany do monitora za pośrednictwem TMDS (minimalna przejściowa sygnalizacja różnicowa). DisplayPort wykorzystuje kodowanie 8b / 10b. Kodowanie służy wielu celom. Po pierwsze, TMDS minimalizuje przejścia sygnałów w celu zmniejszenia emisji EMI. Po drugie, zarówno TMDS, jak i 8b / 10b są protokołami symetrycznymi dla prądu stałego, więc kondensatory blokujące prąd stały można wykorzystać do wyeliminowania problemów z pętlami uziemienia. Po trzecie, 8b / 10b zapewnia wystarczająco wysoką gęstość przejścia, aby umożliwić odzyskanie zegara w odbiorniku, ponieważ DisplayPort nie rozdziela osobnego zegara.

Ponadto w przypadku HDMI i DisplayPort dane audio są również przesyłane na kartę graficzną w celu przesłania do monitora. Te dane są wstawiane w pauzy w strumieniu danych między ramkami wideo. W takim przypadku karta wideo będzie prezentować się jako system audio w systemie operacyjnym, a dane audio zostaną przesłane za pośrednictwem DMA na kartę w celu włączenia do danych wideo.

Prawdopodobnie zdajesz sobie sprawę, że dla ekranu 1920 x 1080 z 4 bajtami na piksel potrzebujesz tylko około 8 MB do przechowywania obrazu, ale pamięć RAM wideo w komputerze jest prawdopodobnie wiele razy większa. Wynika to z faktu, że RAM wideo nie służy wyłącznie do przechowywania bufora ramki. Pamięć RAM wideo jest bezpośrednio podłączona do GPU, specjalnego procesora zaprojektowanego do wydajnego renderowania 3D i dekodowania wideo. GPU korzysta z bezpośredniego dostępu do pamięci RAM wideo, aby przyspieszyć proces renderowania. W rzeczywistości przenoszenie danych z pamięci głównej do pamięci wideo jest trochę wąskim gardłem, ponieważ magistrala PCI, która łączy kartę wideo z procesorem i pamięcią główną, jest znacznie wolniejsza niż połączenie między GPU i RAM wideo.

alex.forencich
źródło
7

Różne nowoczesne wyjścia wyświetlające są zasadniczo szeregowymi strumieniami bitów. Szybkość transmisji jest zbyt wysoka dla procesora (lub jeśli mogłaby nadążyć, pochłaniałaby zbyt dużo czasu przetwarzania). Część pamięci jest odkładana na bity obrazu. Dedykowany sprzęt odczytuje zawartość pamięci i przesyła ją strumieniowo. Ten kawałek jest podobny do kontrolera DMA i właściwie dość prosty. To tylko niewielka część nowoczesnego procesora graficznego, który głównie zajmuje się tworzeniem tego obrazu w pamięci za pomocą poleceń GPU wyższego poziomu.

Pamięć zawierająca obraz wideo może być częścią pamięci głównej (taniej) lub pamięci dedykowanej, do której jednocześnie można uzyskać dostęp przez „DMA” oraz CPU i / lub GPU. „DMA” musi być skonfigurowany z różnymi parametrami, na przykład szerokością i wysokością pikseli, głębią kolorów, początkową lokalizacją w pamięci itp.

Na współczesnych komputerach GPU jest (bardzo wyspecjalizowanym) procesorem, który rywalizuje z szybkością głównego procesora (i przewyższa go na własnym terenie). Robi takie rzeczy, jak generowanie obrazu psuido-3D z zestawu obiektów 3D z teksturami i źródłami światła. Wszystko to można zrobić za pomocą GPU w pamięci wideo. CPU po prostu dostarcza obiekty, tekstury i źródła światła.

Odczytywanie danych wideo z pamięci i przenoszenie ich jest dość prostym procesem, ale należy to robić dość szybko i cały czas. Dlatego to zadanie jest dobrze dostosowane do dedykowanego sprzętu i źle dopasowane do procesora. AFAIK ostatnimi komputerami, które miały procesor zaangażowany w generowanie sygnału wideo, były ZX80 / 81 i Spectrum. Na tych procesor może wykonywać swoją pracę tylko w czasie odtwarzania (w pionie?).

Wouter van Ooijen
źródło
1
To świetna informacja. Więc kontroler DMA (lub podobny sprzęt) ma bezpośredni dostęp do pamięci wideo? A czy w systemie ze zintegrowaną grafiką, który korzysta z systemowej pamięci RAM, ma bezpośredni dostęp do systemowej pamięci RAM? Przepraszam za prostotę moich pytań. Jestem wielkim majsterkowiczem, więc skaczę do rzeczy na wyższym poziomie z wiedzą na niższym poziomie. :)
Craig Lafferty
I w odpowiedzi: skąd kontroler wie, z którego adresu w pamięci RAM „ukraść” ramkę? Ramy / mapy bitowe są bardzo szybko zastępowane i, jak sądzę, przenoszone.
Craig Lafferty,
Twój ostatni komentarz jest poprawny: jest przechowywany w buforze klatek , a dla analogowego wideo jest przekazywany do RAMDAC . Adres bufora ramki może być stały lub określony w rejestrze sterującym. Istnieją różne sztuczki polegające na zamianie buforów klatek między klatkami lub podczas klatek lub w niektórych systemach (Amiga) zmieniających tryb wideo w połowie klatki.
pjc50
Dlaczego procesor zostałby spowolniony? Czy nie musi już przetwarzać wideo, aby kontroler mógł z niego korzystać? Spróbuję jeszcze raz zgadnąć i powiem, że kontroler odczytuje pamięć RAM w kółko, a CPU / GPU aktualizuje pamięć RAM tylko o nowe informacje dotyczące wyświetlania, gdy coś się zmieniło, więc na przykład GPU przełączy mój bieżący ekran w jego RAM i kiedy poruszam kursorem, aktualizuje zmienione piksele. W międzyczasie kontroler odczytuje pamięć RAM około 60 razy na sekundę (chyba standardowy FR).
Craig Lafferty
1
Pamięć RAM wideo służy nie tylko do przechowywania wyświetlanego obrazu, ale jest również używana wewnętrznie przez procesor graficzny do przechowywania danych sceny renderowanych w buforze klatek. Może to zająć dużo miejsca, ponieważ procesor graficzny potrzebuje dostępu do szczegółowych siatek 3D obiektów wraz ze wszystkimi danymi tekstur ich powierzchni.
alex.forencich