Estou explorando algoritmos isosuperficiais na GPU para um projeto de bacharelado (concentrando-me especificamente em dados binários de entrada / saída de voxel em vez de campos com valor real). Portanto, eu tenho uma implementação de CPU de bons e antigos cubos de marchas em funcionamento no OpenFrameworks, e agora na fase de tentar portá-lo para os shaders de computação GLSL, e considerando as armadilhas antes de eu mergulhar. antes, então é tudo novo para mim.
Meu primeiro problema é como usar com eficiência uma tabela de pesquisa entre dezenas ou centenas de threads em um grupo de trabalho? Entendo que uma GPU possui diferentes tipos de memória para diferentes tarefas, mas não tenho certeza de como cada uma delas opera ou qual tipo usar.
A tabela de copypasta clássica de Paul Bourke é uma matriz de 256 * 16, portanto, se usar um tipo de byte escalar, presumivelmente ele poderá ser compactado em uma textura de 4kb ou SSBO.
A questão é: como impedir que os diferentes threads desagradem uns aos outros? Muitos cubos em cada grupo de trabalho podem potencialmente ter a mesma configuração, portanto, tentando acessar o mesmo local no buffer ao mesmo tempo. Existe uma solução alternativa ou otimização para lidar com isso?