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?
Respostas:
O melhor local para colocar uma tabela de consulta para um sombreador de computação de GPU depende do tamanho da tabela de consulta e da frequência / coerência do acesso. No seu caso (você mencionou 4kb), a memória local compartilhada provavelmente seria melhor (supondo que você não precise dessa memória para outros fins no mesmo kernel). Essa memória tem nomes diferentes em APIs diferentes, mas é a mesma coisa de arquitetura e segue as mesmas diretrizes de desempenho:
Armazenar a tabela de pesquisa na memória global como um buffer somente leitura pode ter o mesmo desempenho, dependendo do (s) tamanho (s) de cache da GPU específica em que você está executando.
Observe que estou presumindo que esta seja uma tabela de pesquisa somente leitura. Uma tabela de pesquisa de leitura e gravação é uma fera completamente diferente e você não tem boas opções lá.
fonte