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?
Respuestas:
El mejor lugar para colocar una tabla de búsqueda para un sombreador de cómputo GPU depende del tamaño de la tabla de búsqueda y la frecuencia / coherencia de acceso. En su caso (mencionó 4kb), la memoria local compartida probablemente sería la mejor (suponiendo que no necesite esta memoria para otros fines en el mismo núcleo). Esta memoria tiene diferentes nombres en diferentes API, pero es la misma cosa arquitectónica y sigue las mismas pautas de rendimiento:
El almacenamiento de la tabla de búsqueda en la memoria global como un búfer de solo lectura puede funcionar igual de bien, dependiendo del tamaño de la caché de la GPU particular en la que se está ejecutando.
Tenga en cuenta que supongo que esta es una tabla de búsqueda de solo lectura. Una tabla de búsqueda de lectura y escritura es una bestia completamente diferente, y no tiene buenas opciones allí.
fuente