Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 21. listopad 2018, 13:58:04 Předmět: compute shader reset atomic counteru |
|
|
Zkouším přes atomic counter v GLSL compute shaderu spočítat určitý range v bufferu. Detaily jsou nepodstatné. Ale, co už podstatný je: na začátku bych ten atomic counter chtěl vynulovat (nebo spíš nastavit na nějakou hodnotu).
To můžu udělat kopií připravenýho bufferu do atomic counter bufferu. Nebo pomaleji přes map buffer.
Otázka ale je: lze ten atomic counter vynulovat přímo v compute shaderu, třeba když je global invocation id == 0? Musel bych mít zaručeno, že se to vynuluje hned jako první, než se budou počítat další invokace. Ovšem nevím, jestli na to funguje nějaká bariéra, nebo jiný synchronizační nástroj. Nic jsem na netu nenašel. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 21. listopad 2018, 18:54:36 Předmět: |
|
|
Divoky napad: Pust si najprv separatny jedno-vlaknovy CS, ktory ti ho znuluje a za ten daj barieru. Az potom pusti tvoj hlavny CS. _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
Vilem Otte
Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 22. listopad 2018, 02:51:18 Předmět: Re: compute shader reset atomic counteru |
|
|
Co se týče OpenGL-GLSL tak nevím zda budu schopný pomoct. V D3D12 obecně je potřeba provést ResourceBarrier po zápisu do counter bufferu.
Co se týče OpenGL našel jsem pouze thread na Github který se tomu věnoval (definice z ARB_shader_atomic_counter nejsou úplně jednozačné...), kde je řečeno:
citace: |
Based on feedback from IHVs and their implementation of atomic counters we're planning to treat them like we treat other resources like image atomic, image load/store, buffer variables, etc. in that they require explicit synchronization from the application. |
https://github.com/KhronosGroup/OpenGL-API/issues/14
Teď je otázka, když budeš v CS - tak teoreticky můžeš zkusit nastavit counter buffer na 0 uvnitř if(gl_GlobalInvocationID == 0), a poté barrier. Teoreticky by toto řešení mělo fungovat, ale!
Problém je že barrier funguje pouze ve workgroup - a pouze uvnitř workgroup je garantováno že bude v paměti zapsáno.
Další, hlavní, problém - nad tím v jakém pořadí a případně kolik najednou workgroup se bude zpracovávat - neexistuje žádná možnost kontroly (leda bys spouštěl ručně pouze po 1 workgroup uvnitř cyklu, a pokaždé čekal na dokončení). _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 22. listopad 2018, 09:22:38 Předmět: |
|
|
Díky. S barriérou v CS jsem se potýkal včera. Došel jsem právě k tomu závěru, že funguje pravděpodobně jen v rámci té workgrupy a tudíž if (gl_GlobalInvocationID == 0) nebude to pravé. Oni to samozřejmě i píšou v manuálu, ale nějak sme si kolegou nebyli jistí.
Napadlo mě to, co psal pcmaster, ale přijde mi to valstně skoro stejný, jako kopie z bufferu do bufferu na GPU. Stejně se bude muset za to dát bariéra a čekat na dokončení (případně doublebufferovat). _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 22. listopad 2018, 09:50:12 Předmět: |
|
|
Ze GlobalInvocationID == 0 bude fungovat, nemame nijaku garanciu, ale je to VELMI pravdepodobne To z toho dovodu, ze scheduler fakt najprv spusti skupinu s vlaknom 0. Ale spoliehat sa na to, to radsej nie. _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 22. listopad 2018, 10:02:53 Předmět: |
|
|
No právě. Pak by to někde občas bliklo, nebo něco takovýho. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Vilem Otte
Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 22. listopad 2018, 13:15:20 Předmět: |
|
|
citace: |
To z toho dovodu, ze scheduler fakt najprv spusti skupinu s vlaknom 0. |
Scheduler může najednou pustit i více workgroup (v ten moment celé řešení padá), což je celkem běžná záležitost - takže výsledek se pak může lišit na jiném hardware nebo i driveru. _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
|
pcmaster
Založen: 28. 07. 2007 Příspěvky: 1824
|
Zaslal: 22. listopad 2018, 15:25:00 Předmět: |
|
|
To je pravda. _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
|
|