10.08.2013 Views

Terrain Processing on Modern GPU - Computer Graphics Group ...

Terrain Processing on Modern GPU - Computer Graphics Group ...

Terrain Processing on Modern GPU - Computer Graphics Group ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!