2011-12-30 19 views
15

Aunque se supone que las GPU se usan con tipos de datos de coma flotante, me interesaría saber cuán rápido puede la GPU procesar operaciones bit a bit. Estos son los más rápidos posibles en la CPU, pero ¿imita la GPU las operaciones bit a bit o se calculan por completo en el hardware? Estoy planeando usarlos dentro de los programas de sombreado escritos con GLSL. También supongo que si las operaciones bit a bit tienen un rendimiento completo, los tipos de datos enteros deberían tener también, pero necesito confirmación al respecto.Desempeño de operaciones enteras y en bits en la GPU

Para ser más precisos, las versiones dirigidas son OpenGL 3.2 y GLSL 1.5. El hardware que debe ejecutar esto es cualquier tarjeta gráfica Radeon HD y GeForce series 8 y más recientes. Si hay algunos cambios importantes en las versiones más nuevas de OpenGL y GLSL relacionadas con las velocidades de procesamiento de operaciones/enteros bit a bit, me alegraría si Los señalaré.

+0

Debe especificar una arquitectura de GPU particular, o al menos la versión de OpenGL. En este momento, esta pregunta es terriblemente vaga. –

+0

@BenVoigt actualizado, es lo suficientemente preciso, o necesita un nombre de código específico de la arquitectura (los cambian como para cada nueva tarjeta) – Raven

+0

Raven: hay algunos cambios enormes entre Radeon HD 1xxx y HD 7xxx, pero esa información adicional es una gran mejora Suponiendo que está buscando tarjetas que publicitan el soporte OpenGL 3.2 (o posterior), eso es probablemente lo suficientemente claro. –

Respuesta

8

Esta pregunta fue respondida parcialmente Integer calculations on GPU

En las GPU modernas cortos tienen un rendimiento equivalente INT y FP para los datos de 32 bits. Entonces tus operaciones lógicas se ejecutarán a la misma velocidad.

Desde una perspectiva de programación, perderá rendimiento si está tratando con datos enteros SCALAR. A las GPU les gusta trabajar con operaciones PARALLEL y PACKED.

for(int i=0; i<LEN_VEC4; i++) 
    VEC4[i] = VEC4[i] * VEC4[i]; // (x,y,z,w) * (x,y,z,w) 

Si estás haciendo algo así como ...

for(int i=0; i<LEN_VEC4; i++) 
    VEC4[i].w = (VEC4[i].x & 0xF0F0F0F0) | (VEC4[i].z^0x0F0F0F0F)^VEC4[i].w; 

... hacer muchas operaciones diferentes en los elementos del mismo vector que se ejecutará en problemas de rendimiento.

+0

Gracias por su respuesta. En combinación con publicaciones vinculadas, es suficiente, pero tengo una pregunta más. Como se escribió, el rendimiento INT y FP debe ser el mismo. Pero no hay nada como las operaciones bit a bit para FP (o al menos sería extraño hacerlo). Entonces, ¿qué están diciendo que son iguales ... añadiendo y demás? Y si ese es el caso, las operaciones en modo bit (por ejemplo, desplazamiento) son más rápidas que las operaciones matemáticas (sumas ...) para los tipos de datos INT, o el rendimiento también es igual. – Raven

+0

Si "X bit shift left by 1" es más rápido que "x + x" depende bastante de la arquitectura. Espero que ocurra algo de optimización cuando compile su shadar (a menos que lo escriba en el ensamblaje de la GPU). "X divide por 2" es de origen más lento que "X bit shift right 1" solo porque hay más lógica involucrada en dividir que en cambiar de bit. –

+3

"A las GPU les gusta trabajar con operaciones PARALLEL y PACKED". Las GPU más recientes de NVidia y AMD son arquitecturas escalares. Por lo tanto, el rendimiento de las operaciones puramente escalares es de hecho mayor que para las operaciones vectoriales. – datenwolf

Cuestiones relacionadas