Terrain Processing on Modern GPU - Computer Graphics Group ...
Terrain Processing on Modern GPU - Computer Graphics Group ...
Terrain Processing on Modern GPU - Computer Graphics Group ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
4.5.2 Server<br />
Hlavním vláknem našeho načítacího systému je Server. Server řídí veškeré zpracování požadavků<br />
od jejich přijetí až po jejich zpětné vyzvednutí žadatelem (tím je v našem případě Renderer).<br />
Kromě toho provádí správu paměti a aktualizaci všech struktur podle toho, jak jsou požadavky<br />
zpracovávány.<br />
Aby bylo možné přidávat požadavky neblokujícím způsobem, je hlavní vstupní fr<strong>on</strong>ta řešena<br />
pomocí dvou kopií, z nichž každá obsahuje jiné záznamy. Tímto způsobem je možné z fr<strong>on</strong>ty číst i<br />
do ní zapisovat zároveň ze dvou různých vláken. Takový přístup je nutný, aby zobrazovací vlákno<br />
nemuselo nikdy čekat kvůli synchr<strong>on</strong>izaci. Hlavní činnost serveru spočívá v třízení požadavků a<br />
jejich předávání správným vláknům pro další zpracování. Pro takové řízení obsahuje server<br />
několik různých fr<strong>on</strong>t a pomocných vyhledávacích struktur, aby bylo možné co nejrychleji<br />
přistupovat k různým požadavkům.<br />
Každý požadavek zahájí z pohledu Serveru svůj život tím, že je přidán do vstupní fr<strong>on</strong>ty. Odtud<br />
jsou požadavky pravidelně vybírány a je k<strong>on</strong>trolována jejich existence. Každý požadavek má svůj<br />
implicitní jednoznačný identifikátor, podle kterého je možno jej rozpoznat. V případě, že<br />
požadavek již existuje, je pouze aktualizován na základě nově nastavených parametrů.<br />
V opačném případě je třeba vytvořit zvláštní strukturu, jež reprezentuje požadavek interně. Ta<br />
obsahuje mimo jiné i buffer, do nějž budou později uložena načtená data. Zde přichází na řadu<br />
správce paměti, který je zažádán o přidělení bloku potřebné velikosti. Velikost závisí na typu<br />
požadovaných dat a je specifikována data providerem, o kterém se ještě zmíníme v odstavci<br />
4.5.3. Správce paměti rozhodne, zda je možné specifikovanému požadavku vyhovět. Pokud ne<br />
(nedostatek paměti), Server se pokusí uvolnit nějakou paměť. To dělá opakovaně tak dlouho,<br />
dokud mu správce paměti nepřidělí požadovaný blok, nebo dokud je co uvolňovat. Uvolňována<br />
jsou data spojená s požadavky, které již byly vyřízeny a vyzvednuty Rendererem. Z takových se<br />
vezme vždy ten požadavek, který byl nejdéle nepoužit (LRU metoda).<br />
Ať již byl požadavek vytvořen nový, nebo pouze aktualizován, je zařazen na k<strong>on</strong>ec fr<strong>on</strong>ty, jež<br />
odpovídá jeho prioritě (tu stanoví Renderer). Zvlášť jsou skládány požadavky, které byly<br />
označeny za urgentní – takové musí být zpracovány co nejdříve. Po zařazení požadavku do<br />
jakékoli fr<strong>on</strong>ty je probuzeno (pokud spí) Loader vlákno, které vybere jeden z připravených<br />
požadavků, a ten vyřídí tím, že načte požadovaná data ze správného souboru na disku. Více tuto<br />
část rozvedeme v odstavci 4.5.3.<br />
Požadavky, které byly úspěšně načteny Loader vláknem, jsou opět řazeny do další fr<strong>on</strong>ty, která<br />
už je řízena tradičním FIFO přístupem. V této fr<strong>on</strong>tě čekají na zpracování některým z Worker<br />
vláken. S přidáním požadavku do fr<strong>on</strong>ty je některé z Worker vláken probuzeno, aby se o<br />
požadavek postaralo. Práce Worker vlákna je více popsána v odstavci 4.5.4.<br />
Zpracované požadavky se zařadí do výstupní fr<strong>on</strong>ty, kde jsou připraveny pro vyzvednutí<br />
Renderer vláknem. Renderer má možnost si vzít požadavky jeden po druhém, nebo vybrat jeden<br />
k<strong>on</strong>krétní, který je pro něj důležitý. To je možné provést i blokujícím způsobem, kdy žadatel čeká,<br />
dokud není požadavek zpracován. Vyzvednutí požadavku z této fr<strong>on</strong>ty obnáší jeho dočasné<br />
uzamknutí. S požadavkem není možné manipulovat – nemůže být tedy odstraněn ani<br />
83