Soy consciente de que la mayoría de las GPU modernas, aunque están diseñadas para coma flotante, son más o menos equivalentes en rendimiento entero en estos días, con algunas advertencias como la falta de una suma múltiple fusionada. Sin embargo, no estoy seguro de cómo se aplica esto a las operaciones de turno. Estoy haciendo Marching Cubes en la GPU, inicialmente escribiendo una posición empaquetada de 32 bits para cada cubo de superficie y luego desempacando estos en una pasada posterior a los vértices reales en ese cubo, así:
ivec3 unpackedPos = ivec3( packedPos >> 20 & 0x3FF,
packedPos >> 10 & 0x3FF,
packedPos & 0x3FF);
¿Se me ocurrió preguntarme si las unidades sombreadoras tienen desplazadores de barril en estos días? ¿Estoy haciendo 2 turnos aquí o 30?
EDITAR >> Soy un idiota ... Gracias por las respuestas chicos, útil saberlo, pero he estado haciendo todo esto mal. Debería usar el formato de textura RGB10_A2UI y luego empaquetar / desempacar con una sola instrucción de carga / almacenamiento de imágenes en lugar de perder el tiempo con los cambios de bits.
RE_EDIT >> O no ... Este método aparentemente funciona en cajas rojas pero no en las verdes, por lo que se vuelve a los cambios de bits.
fuente
Respuestas:
Sí (con el 50% del rendimiento de FMA 32b en nVIDIA Maxwell).
Ver https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#arithmetic-instructions
fuente