Sto esplorando algoritmi isosurface su GPU per un progetto di laurea (concentrandomi in particolare su dati voxel binari in / out piuttosto che su campi con valori reali). Quindi ho un'implementazione CPU di buoni vecchi cubi in marcia in esecuzione su OpenFrameworks, e ora nella fase di provare a portarlo su shader di calcolo GLSL e considerare le insidie prima di immergermi. Ho scritto solo vert e frag shader prima quindi è tutto nuovo per me.
Il mio primo problema è come utilizzare in modo efficiente una tabella di ricerca su dozzine o centinaia di thread in un gruppo di lavoro? Comprendo che una GPU ha diversi tipi di memoria per compiti diversi ma non sono completamente sicura su come ciascuno di essi funzioni o quale tipo usare.
La classica tabella copypasta di Paul Bourke è un array 256 * 16, quindi se si utilizza un tipo di byte scalare questo può presumibilmente essere impacchettato in una trama 4kb o SSBO.
La domanda è: come impedire ai diversi thread di inciamparsi l'un l'altro? Molti cubi in ciascun gruppo di lavoro possono potenzialmente avere la stessa configurazione, quindi tentando di accedere contemporaneamente alla stessa posizione nel buffer. C'è una soluzione alternativa o ottimizzazione per far fronte a questo?