Estoy explorando algoritmos de isosuperficie en GPU para un proyecto de licenciatura (concentrándome específicamente en datos voxel de entrada / salida binarios en lugar de campos de valor real). Así que tengo una implementación de CPU de viejos cubos de marcha en funcionamiento en OpenFrameworks, y ahora en la etapa de tratar de portarlo a los sombreadores de cómputo GLSL, y considerando los escollos antes de sumergirme. Solo he escrito sombreadores vert y frag. antes, así que todo es nuevo para mí.
Mi primer problema es cómo usar eficientemente una tabla de búsqueda en docenas o cientos de hilos en un grupo de trabajo. Entiendo que una GPU tiene diferentes tipos de memoria para diferentes tareas, pero no estoy completamente seguro de cómo funciona cada uno o qué tipo usar.
La tabla de copia clásica de Paul Bourke es una matriz de 256 * 16, por lo que si se usa un tipo de byte escalar, presumiblemente se puede empaquetar en una textura de 4 kb o SSBO.
La pregunta es, ¿cómo evitar que los diferentes hilos se tropiecen? Muchos cubos en cada grupo de trabajo pueden tener la misma configuración y, por lo tanto, intentar acceder a la misma ubicación en el búfer al mismo tiempo. ¿Hay alguna solución u optimización para lidiar con esto?