Wielokrotne buforowanie
W informatyce wielokrotne buforowanie to użycie więcej niż jednego bufora do przechowywania bloku danych, dzięki czemu „czytelnik” zobaczy pełną (choć być może starą) wersję danych, a nie częściowo zaktualizowaną wersję danych tworzony przez „pisarza” . Jest bardzo często używany do wyświetlania obrazów komputerowych. Jest również używany, aby uniknąć konieczności używania dwuportowej pamięci RAM (DPRAM), gdy czytniki i pisarze są różnymi urządzeniami.
Opis
Łatwym sposobem wyjaśnienia, jak działa wielokrotne buforowanie, jest rzeczywisty przykład. Jest ładny, słoneczny dzień i zdecydowałeś się wyjść z brodzika, tylko nie możesz znaleźć swojego węża ogrodowego. Będziesz musiał napełnić basen wiadrami. Więc napełniasz jedno wiadro (lub bufor) z kranu, zakręcasz kran, podchodzisz do basenu, wlewasz wodę, wracasz do kranu, aby powtórzyć ćwiczenie. Jest to analogiczne do pojedynczego buforowania. Kran musi być zakręcony podczas „przetwarzania” wiadra z wodą.
Teraz zastanów się, jak byś to zrobił, gdybyś miał dwa wiadra. Napełniałbyś pierwsze wiadro, a następnie wymieniałeś drugie pod bieżącym kranem. Masz wtedy czas potrzebny na napełnienie drugiego wiadra, aby opróżnić pierwsze do brodzika. Po powrocie możesz po prostu zamienić wiadra, tak aby pierwsze napełniało się ponownie, w tym czasie możesz opróżnić drugie do basenu. Można to powtarzać, aż pula będzie pełna. Wyraźnie widać, że ta technika napełni basen znacznie szybciej, ponieważ jest znacznie mniej czasu spędzonego na czekaniu, nic nie robieniu, podczas gdy wiadra się napełniają. Jest to analogiczne do podwójnego buforowania. Kran może być cały czas włączony i nie musi czekać na zakończenie przetwarzania.
Gdyby zatrudnić inną osobę do przenoszenia wiadra do basenu, podczas gdy jedno jest napełniane, a drugie opróżniane, byłoby to analogiczne do potrójnego buforowania. Gdyby ten krok trwał wystarczająco długo, można by użyć jeszcze większej liczby wiader, tak aby kran ciągle płynął, napełniając wiadra.
W informatyce powszechna jest sytuacja z działającym kranem, którego nie można lub nie należy wyłączać (np. Strumień audio). Ponadto komputery zazwyczaj wolą zajmować się porcjami danych niż strumieniami. W takich sytuacjach często stosuje się podwójne buforowanie.
Podwójne buforowanie sieci Petriego
Sieć Petriego na ilustracji pokazuje, jak działa podwójne buforowanie. Przejścia W1 i W2 reprezentują odpowiednio zapis do bufora 1 i 2, podczas gdy R1 i R2 reprezentują odpowiednio odczyt z bufora 1 i 2. Na początku włączone jest tylko przejście W1. Po wyzwoleniu W1, oba R1 i W2 są włączone i mogą działać równolegle. Kiedy skończą, R2 i W1 postępują równolegle i tak dalej.
Tak więc po początkowym stanie przejściowym, w którym W1 odpala sam, ten system jest okresowy, a przejścia są włączone – zawsze w parach (odpowiednio R1 z W2 i R2 z W1).
Podwójne buforowanie w grafice komputerowej
W grafice komputerowej podwójne buforowanie to technika rysowania grafiki, która nie wykazuje (lub mniej) zacięć, rozdzierania i innych artefaktów.
Programowi trudno jest narysować ekran tak, aby piksele nie zmieniały się więcej niż raz. Na przykład podczas aktualizowania strony tekstu znacznie łatwiej jest wyczyścić całą stronę, a następnie narysować litery, niż w jakiś sposób wymazać tylko piksele, które są używane w starych literach, ale nie w nowych. Jednak ten pośredni obraz jest postrzegany przez użytkownika jako migoczący . Ponadto monitory komputerowe nieustannie przerysowują widoczną stronę wideo (tradycyjnie około 60 razy na sekundę), więc nawet doskonała aktualizacja może być chwilowo widoczna jako poziomy podział między „nowym” obrazem a nieprzerysowanym „starym” obrazem, znany jako łzawienie .
Podwójne buforowanie oprogramowania
Implementacja programowa podwójnego buforowania powoduje, że wszystkie operacje rysowania przechowują swoje wyniki w pewnym obszarze systemowej pamięci RAM ; każdy taki region jest często nazywany „buforem zapasowym”. Kiedy wszystkie operacje rysowania zostaną uznane za zakończone, cały region (lub tylko zmieniona część) jest kopiowany do pamięci RAM wideo („przedni bufor”); to kopiowanie jest zwykle zsynchronizowane z wiązką rastrową monitora, aby uniknąć rozdarcia. Implementacje programowe podwójnego buforowania z konieczności wymagają więcej pamięci i czasu procesora niż pojedyncze buforowanie ze względu na pamięć systemową przydzieloną dla bufora wstecznego, czas operacji kopiowania i czas oczekiwania na synchronizację.
Komponowane menedżery okien często łączą operację „kopiowania” z „ kompozycją ” używaną do pozycjonowania okien, przekształcania ich za pomocą efektów skali lub wypaczania oraz nadawania częściom przezroczystości. Zatem „przedni bufor” może zawierać tylko złożony obraz widoczny na ekranie, podczas gdy dla każdego okna istnieje inny „bufor tylny” zawierający niezłożony obraz całej zawartości okna.
Przewracanie strony
W metodzie przerzucania stron, zamiast kopiowania danych, oba bufory mogą być wyświetlane (oba znajdują się w Video RAM ). W dowolnym momencie jeden bufor jest aktywnie wyświetlany przez monitor, podczas gdy drugi, bufor w tle, jest rysowany. Gdy bufor tła jest kompletny, role tych dwóch są zamieniane. Odwrócenie strony jest zwykle realizowane przez modyfikację rejestru sprzętowego w kontrolerze wyświetlania wideo — wartości wskaźnika do początku danych wyświetlania w pamięci wideo.
Przewracanie stron jest znacznie szybsze niż kopiowanie danych i może zagwarantować, że rozdzieranie nie będzie widoczne, dopóki strony będą przełączane podczas okresu wygaszania pionowego monitora — okresu pustego, kiedy żadne dane wideo nie są rysowane. Aktualnie aktywny i widoczny bufor nazywany jest buforem przednim , podczas gdy strona w tle nazywana jest buforem tylnym .
Potrójne buforowanie
W grafice komputerowej potrójne buforowanie jest podobne do podwójnego buforowania, ale może zapewnić lepszą wydajność. W przypadku podwójnego buforowania program musi czekać, aż ukończony rysunek zostanie skopiowany lub zamieniony, zanim rozpocznie następny rysunek. Ten okres oczekiwania może wynosić kilka milisekund , podczas których nie można dotknąć żadnego bufora.
W potrójnym buforowaniu program ma dwa bufory wsteczne i może natychmiast rozpocząć rysowanie w tym, który nie bierze udziału w takim kopiowaniu. Trzeci bufor, przedni bufor, jest odczytywany przez kartę graficzną w celu wyświetlenia obrazu na monitorze. Po przesłaniu obrazu do monitora bufor przedni jest odwracany (lub kopiowany) z bufora tylnego zawierającego najnowszy pełny obraz. Ponieważ jeden z buforów tylnych jest zawsze pełny, karta graficzna nigdy nie musi czekać na zakończenie działania oprogramowania. W rezultacie oprogramowanie i karta graficzna są całkowicie niezależne i mogą działać we własnym tempie. Wreszcie wyświetlany obraz został uruchomiony bez czekania na synchronizację, a więc z minimalnym opóźnieniem.
Ze względu na to, że algorytm oprogramowania nie odpytuje sprzętu graficznego pod kątem zdarzeń odświeżania monitora, algorytm może w sposób ciągły rysować dodatkowe klatki tak szybko, jak sprzęt może je renderować. W przypadku klatek, które są uzupełniane znacznie szybciej niż interwał między odświeżeniami, możliwe jest wielokrotne zastępowanie ramek buforów tylnych nowszymi iteracjami przed kopiowaniem. Oznacza to, że do bufora zapasowego mogą być zapisywane ramki, które nigdy nie są w ogóle używane, zanim zostaną nadpisane przez kolejne ramki. Nvidia zaimplementowała tę metodę pod nazwą „Fast Sync”.
Alternatywną metodą, czasami określaną jako potrójne buforowanie, jest łańcuch wymiany o długości trzech buforów. Gdy program wylosuje oba bufory wsteczne, czeka, aż pierwszy z nich zostanie umieszczony na ekranie, przed narysowaniem kolejnego bufora wstecznego (tzn. jest to 3-długa kolejka pierwsze wejście, pierwsze wyjście ). Wydaje się, że większość gier Windows odnosi się do tej metody podczas włączania potrójnego buforowania. [ potrzebne źródło ]
Czterokrotne buforowanie
Termin buforowanie poczwórne oznacza użycie podwójnego buforowania dla każdego obrazu lewego i prawego oka w implementacjach stereoskopowych , a więc łącznie cztery bufory (gdyby zastosowano potrójne buforowanie, byłoby sześć buforów). Polecenie zamiany lub skopiowania bufora zwykle dotyczy obu par jednocześnie, więc w żadnym momencie jedno oko nie widzi starszego obrazu niż drugie oko.
Buforowanie Quad wymaga specjalnej obsługi w sterownikach karty graficznej, która jest wyłączona w przypadku większości kart konsumenckich. Seria AMD Radeon HD 6000 i nowsze obsługują tę funkcję [1] .
Standardy 3D, takie jak OpenGL i Direct3D, obsługują poczwórne buforowanie.
Podwójne buforowanie dla DMA
Termin podwójne buforowanie jest używany do kopiowania danych między dwoma buforami w celu transferu bezpośredniego dostępu do pamięci (DMA), nie w celu zwiększenia wydajności, ale w celu spełnienia określonych wymagań dotyczących adresowania urządzenia (zwłaszcza urządzeń 32-bitowych w systemach z szerszym adresowaniem zapewnianym przez fizyczne rozszerzenie adresu ). Sterowniki urządzeń DOS i Windows to miejsce, w którym prawdopodobnie zostanie użyty termin „podwójne buforowanie”. Kod źródłowy Linuksa i BSD nazywa te „bufory odbijania”.
Niektórzy programiści próbują uniknąć tego rodzaju podwójnego buforowania za pomocą technik kopiowania zerowego .
Inne zastosowania
Podwójne buforowanie jest również stosowane jako technika ułatwiająca przeplatanie lub usuwanie przeplotu sygnałów wideo.
Zobacz też
- Adaptacyjne odświeżanie kafelków
- Łańcuch wymiany
- Synchronizacja pionowa
- Stereoskopia
- Okulary migawkowe LC
- Nvidia 3D Vision
- HD3D
- Wirtualne usługi DMA (VDS)
http://drive.google.com/file/d/1Uz5vEiTvnhgNxAYow-dxQnwKhb0mpCR2/view Animacja Amnotron na kolorowych stronach magazynu komputerowego 54 i 55.
Linki zewnętrzne
- Potrójne buforowanie: popraw wydajność gry na komputerze za darmo — Mike Doolittle (24.05.2007)
- http://www.tweakguides.com/Graphics_10.html