.[ ČeskéHry.cz ].
Konstrukcia kD-stromu (paralelne)

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
pcmaster



Založen: 28. 07. 2007
Příspěvky: 1827

PříspěvekZaslal: 28. březen 2010, 14:16:47    Předmět: Konstrukcia kD-stromu (paralelne) Odpovědět s citátem

Znovu Caute.

Riesim dalsi principialny problem a rad by som o nom podiskutoval Smile

Cital som viacero novsich paperov okolo GPU a kDstromov, no paralelnu konstrukciu riesi len malo z nich, aj to na CPU (Shevtsov, Soupikov, Kapustin, Eurographics 2007) a na GPU len jediny (Zhou, Hou, Wang, Guo, SIGGRAPH Asia 2008).

Problem s GPU konstrukciou je ten, ze je dost neprijemne si pisat memory manager, ktory bude (re)alokovat dane buffery, konkretne najvacsi problem vidim s bufferom pre indexy trojuholnikov v listoch, pretoze ako vsetci vieme, kazdy trojuholnik moze v kDstrome patrit do mnoho listov (na rozdiel od BVH, kde sa trojuholniky nesplituju). Ked chceme novu pamat, musime 'prerusit' kernel, zaalokovat novu pamat a potom pustit kernel znovu, co sa mi zda prilis narocne (mentalne aj programatorsky Very Happy).

Ja teda chcem zacat s takym seriovym kDtree konstrukcnym algoritmom, ktory bude pracovat s buffermi konstantnej dlzky. Pri BVH som problem bufferu pre uzly (vnutorne i listy) vyriesil implicitnym stromom (lavy potomok je hned za rodicom, pravy na implicitnom offsete dopocitatelnom z hlbky a maximalnej hlbky), co sa chystam pouzit aj pre kDstromy. Ze taketo stromy produkuju dost "riedke" buffery (kopec miesta sa vobec nevyuzije) ma teraz absolutne netrapi.

Takze, ako by ste navrhli riesit buffer pre indexy na trojuholniky v listoch kDstromu? Chcem to spravit rovnako ako v BVH -- kazdy list bude poznat len offset prveho indexu trojuholnika a pocet trojuholnikov. Indexy samotne su ulozene v jednom spojitom bufferi. Pri BVH nie je problem, ako som spominal, pretoze kazdy index je tam len raz. Pri kDstrome tam moze byt kazdy index mnohokrat a moj prvy napad je vyriesit to tak, ze zaalokujem "dostatocne velky" buffer na indexy a pri konstrukcii sa proste odmietnu take splity, ktore by viedli na prilis velky pocet duplicitnych indexov (cize by sa nezmestili do bufferu). To samozrejme nepovedie k najkvalitnejsim stromom, ale aspon sa mi to vlezie do pripravenej pamati. A bude sa to dat paralelizovat (podla toho paperu z roku 2008). Na traverzaciu pouzijem obycajny stack-based algoritmus.

Chapete ma? Very Happy
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna