Vícenásobné ukládání do vyrovnávací paměti - Multiple buffering

Sady 1 , 2 a 3 představují operaci jednoduchého, dvojitého a trojitého ukládání do vyrovnávací paměti s povolenou vertikální synchronizací (vsync). V každém grafu plyne čas zleva doprava. Všimněte si, že 3 ukazuje swapový řetězec se třemi nárazníky; původní definice trojitého ukládání do vyrovnávací paměti by vyhodila snímek C, jakmile snímek D skončil, a začal kreslit snímek E do vyrovnávací paměti 1 bez zpoždění. Sada 4 ukazuje, co se stane, když nakreslení rámečku (v tomto případě B) trvá déle než obvykle. V tomto případě chybí aktualizace rámce. V časově citlivých implementacích, jako je přehrávání videa, může být zrušen celý snímek. S třípufrovým swapovým řetězcem v sadě 5 může začít kreslení rámečku B, aniž byste museli čekat na zkopírování rámečku A do videopaměti, čímž se sníží šance, že opožděnému rámečku chybí jeho vertikální vysledování.

V počítačové vědě je vícenásobné ukládání do vyrovnávací paměti použití více než jedné vyrovnávací paměti k uložení bloku dat, takže „čtenář“ uvidí spíše úplnou (i když možná starou) verzi dat než částečně aktualizovanou verzi dat. byl vytvořen „spisovatelem“ . Používá se také k zamezení nutnosti používat dual-ported RAM (DPRAM), když jsou čtečky a zapisovače různá zařízení.

Popis

Snadný způsob, jak vysvětlit, jak funguje vícenásobné ukládání do vyrovnávací paměti, je vzít si příklad ze skutečného světa. Je hezký slunečný den a vy jste se rozhodli vytáhnout brouzdaliště, jen vy nemůžete najít svou zahradní hadici. Budete muset naplnit bazén kbelíky. Naplníte tedy jeden kbelík (nebo pufr) z kohoutku, vypnete kohoutek, přejdete k bazénu, nalijete vodu dovnitř, vrátíte se ke kohoutku a cvičení zopakujete. To je analogické s jednoduchým vyrovnáváním. Během „zpracování“ kbelíku s vodou musíte vypnout kohoutek.

Nyní zvažte, jak byste to udělali, kdybyste měli dva kbelíky. Naplnili byste první kbelík a pak druhý vyměnili pod tekoucí kohoutek. Pak máte čas, za který se naplní druhé vědro, aby se první vyprázdnil do brouzdaliště. Když se vrátíte, můžete jednoduše vyměnit kbelíky tak, aby se první znovu plnil, a během této doby můžete druhý vyprázdnit do bazénu. To lze opakovat, dokud není bazén plný. Je zřejmé, že tato technika naplní fond mnohem rychleji, protože čekání, nedělání nic, zatímco se vědra zaplní, je mnohem méně času. To je analogické s dvojitým ukládáním do vyrovnávací paměti. Klepnutí může být stále a nemusí čekat, až bude zpracování hotové.

Pokud byste zaměstnávali jinou osobu k přepravě vědra do bazénu, zatímco se jedna plní a druhá vyprazdňuje, pak by to bylo analogické trojnásobnému ukládání do vyrovnávací paměti. Pokud tento krok trval dostatečně dlouho, můžete zaměstnat ještě více kbelíků, takže kohoutek nepřetržitě běží a plní kbelíky.

V počítačové vědě je běžná situace, kdy máte spuštěný kohoutek, který nelze nebo by neměl být vypnutý (například proud zvuku). Počítače také obvykle dávají přednost zpracování kusů dat spíše než streamům. V takových situacích se často používá dvojité ukládání do vyrovnávací paměti.

Dvojitá pufrovací Petriho síť

Double Buffering Petri Net

Petri net na obrázku ukazuje, jak double buffering pracuje. Přechody W1 a W2 představují zápis do vyrovnávací paměti 1 a 2, zatímco R1 a R2 představují čtení z vyrovnávací paměti 1 a 2. Na začátku je povolen pouze přechod W1. Po požárech W1 jsou obě R1 a W2 povoleny a mohou postupovat paralelně. Když skončí, R2 a W1 postupují paralelně atd.

Takže po počátečním přechodném jevu, kdy W1 vystřelí sám, je tento systém periodický a přechody jsou povoleny - vždy ve dvojicích (R1 s W2 a R2 s W1).

Dvojité ukládání do vyrovnávací paměti v počítačové grafice

V počítačové grafice je dvojité ukládání do vyrovnávací paměti technika pro kreslení grafiky, která nevykazuje žádné (nebo méně) koktání, trhání a další artefakty.

Pro program je obtížné nakreslit displej tak, aby se pixely nezměnily více než jednou. Například při aktualizaci stránky s textem je mnohem snazší vyčistit celou stránku a poté nakreslit písmena, než nějakým způsobem vymazat pouze pixely, které se používají starými písmeny, ale ne novými. Uživatel však tento přechodný obrázek považuje za blikající . Kromě toho, počítačové monitory neustále překreslí viditelnou stránku videa (tradičně na asi 60 krát za sekundu), takže i dokonalý aktualizace mohou být viditelné na okamžik jako horizontální dělič mezi „novou“ image a un-překlesleném „staré“ image, známé jako trhání .

Softwarové dvojité ukládání do vyrovnávací paměti

Softwarová implementace dvojitého ukládání do vyrovnávací paměti má všechny operace kreslení ukládat své výsledky do určité oblasti systémové paměti RAM ; jakákoli taková oblast se často nazývá „zpětná vyrovnávací paměť“. Když jsou všechny operace kreslení považovány za dokončené, celá oblast (nebo pouze změněná část) se zkopíruje do video RAM („přední vyrovnávací paměť“); toto kopírování je obvykle synchronizováno s rastrovým paprskem monitoru , aby nedošlo k roztržení. Softwarové implementace dvojitého ukládání do vyrovnávací paměti nutně vyžadují více paměti a času CPU než jednotlivé ukládání do vyrovnávací paměti kvůli systémové paměti přidělené pro zadní vyrovnávací paměť, času pro operaci kopírování a času čekajícímu na synchronizaci.

Manažeři skládání oken často kombinují operaci „kopírování“ s „ skládáním “, které se používá k umístění oken, jejich transformaci pomocí efektů měřítka nebo deformace a zprůhlednění částí. „Přední vyrovnávací paměť“ tedy může obsahovat pouze složený obraz viditelný na obrazovce, zatímco pro každé okno obsahující jiný než složený obraz celého obsahu okna existuje odlišná „zadní vyrovnávací paměť“.

Převrácení stránky

V metodě převrácení stránky lze místo kopírování dat zobrazit obě vyrovnávací paměti (obě jsou ve Video RAM ). V jednom okamžiku se jedna vyrovnávací paměť aktivně zobrazuje na monitoru, zatímco druhá vyrovnávací paměť na pozadí se kreslí. Když je vyrovnávací paměť na pozadí dokončena, role obou se přepnou. Převrácení stránky se obvykle provádí úpravou hardwarového registru v řadiči zobrazení videa - hodnota ukazatele na začátek dat zobrazení ve videopaměti.

Převrácení stránky je mnohem rychlejší než kopírování dat a může zaručit, že roztržení nebude viditelné, pokud budou stránky přepnuty během intervalu vertikálního zatemnění monitoru - období prázdného obrazu, když nejsou vykreslována žádná video data. Aktuálně aktivní a viditelná vyrovnávací paměť se nazývá přední vyrovnávací paměť , zatímco stránka na pozadí se nazývá zadní vyrovnávací paměť .

Trojité ukládání do vyrovnávací paměti

V počítačové grafice je trojité ukládání do vyrovnávací paměti podobné dvojímu ukládání do vyrovnávací paměti, ale může poskytnout lepší výkon. Při dvojitém ukládání do vyrovnávací paměti musí program počkat, až bude dokončený výkres zkopírován nebo zaměněn, než zahájí další výkres. Tato čekací doba může být několik milisekund, během nichž nelze dotknout žádné vyrovnávací paměti.

Při trojitém ukládání do vyrovnávací paměti má program dvě zadní vyrovnávací paměti a může okamžitě začít kreslit v té, která se na takovém kopírování nepodílí. Třetí vyrovnávací paměť, přední vyrovnávací paměť, čte grafická karta pro zobrazení obrazu na monitoru. Jakmile je obraz odeslán na monitor, je přední vyrovnávací paměť překlopena (nebo zkopírována) zadní vyrovnávací pamětí, která obsahuje nejnovější úplný obraz. Vzhledem k tomu, že jedna ze zadních vyrovnávacích pamětí je vždy dokončena, nemusí grafická karta nikdy čekat na dokončení softwaru. V důsledku toho jsou software a grafická karta zcela nezávislé a mohou běžet svým vlastním tempem. Nakonec byl zobrazený obraz spuštěn bez čekání na synchronizaci a tedy s minimálním zpožděním.

Vzhledem k tomu, že softwarový algoritmus nevyzývá grafický hardware pro události obnovení monitoru, může algoritmus nepřetržitě kreslit další snímky tak rychle, jak je hardware dokáže vykreslit. U rámců, které jsou dokončeny mnohem rychleji než interval mezi obnovami, je možné před kopírováním několikrát nahradit rámy zadní vyrovnávací paměti novějšími iteracemi. To znamená, že do zadní vyrovnávací paměti mohou být zapsány snímky, které se nikdy nepoužívají, než budou přepsány po sobě jdoucími snímky. Nvidia implementovala tuto metodu pod názvem „Fast Sync“.

Alternativní metodou, která se někdy označuje jako trojité ukládání do vyrovnávací paměti, je swapový řetězec dlouhý tři vyrovnávací paměti. Poté, co program natáhne obě zadní vyrovnávací paměti, počká, až se první umístí na obrazovku, před nakreslením další zadní vyrovnávací paměti (tj. Je to 3-dlouhá fronta prvního vstupu , první výstupu ). Zdá se, že většina her pro Windows odkazuje na tuto metodu při povolení trojitého ukládání do vyrovnávací paměti.

Quad buffering

Termín quad buffering znamená použití dvojitého bufferingu pro každý obraz levého a pravého oka ve stereoskopických implementacích, tedy celkem čtyři buffery (pokud by bylo použito trojité buffering, pak by jich bylo šest ). Příkaz pro výměnu nebo kopírování vyrovnávací paměti obvykle platí pro oba páry najednou, takže jedno oko nikdy neuvidí starší obrázek než druhé oko.

Quad buffering vyžaduje speciální podporu v ovladačích grafické karty, která je u většiny spotřebitelských karet zakázána. Řada AMD Radeon HD 6000 a novější ji podporují [1] .

3D standardy jako OpenGL a Direct3D podporují quad buffering.

Dvojité ukládání do vyrovnávací paměti pro DMA

Termín dvojité ukládání do vyrovnávací paměti se používá pro kopírování dat mezi dvěma vyrovnávacími paměti pro přenosy přímé paměti (DMA), nikoli pro zvýšení výkonu, ale ke splnění konkrétních požadavků na adresování zařízení (zejména 32bitových zařízení v systémech se širším adresováním poskytovaným prostřednictvím fyzického Rozšíření adresy ). Ovladače zařízení pro DOS a Windows jsou místem, kde je pravděpodobné, že bude použit termín „dvojité ukládání do vyrovnávací paměti“. Zdrojový kód Linuxu a BSD tyto „bounce buffery“ nazývá.

Někteří programátoři se snaží tomuto druhu dvojitého ukládání do vyrovnávací paměti vyhnout technikami nulového kopírování .

Jiná použití

Dvojité ukládání do vyrovnávací paměti se také používá jako technika k usnadnění prokládání nebo odstraňování prokladu video signálů.

Viz také

Reference

externí odkazy