2010-01-17 27 views
18

He estado tratando de encontrar información sobre el rendimiento del uso de float vs double en hardware de gráficos. He encontrado mucha información sobre float vs double en CPU, pero esa información es más escasa para las GPU.float vs double en hardware de gráficos

I código con OpenGL, por lo que si hay alguna información específica de esa API que sientes que debe conocerse, vamos a tenerlo.

Entiendo que si el programa está moviendo una gran cantidad de datos hacia/desde el hardware de gráficos, entonces probablemente sería mejor usar flotadores ya que los dobles requerirían el doble de ancho de banda. Mis consultas son más sobre cómo el hardware de gráficos lo procesa. Tal como lo entiendo, las CPU Intel modernas convierten flotante/doble en real de 80 bits para cálculos (las instrucciones SSE están excluidas) y ambos tipos son, por lo tanto, igualmente rápidos. ¿Las tarjetas gráficas modernas hacen algo así? ¿el flotador y el doble rendimiento son iguales ahora? ¿Hay alguna razón fuerte para usar una sobre la otra?

Respuesta

19

En términos de velocidad, las GPU están optimizados para flotadores. Estoy mucho más familiarizado con el hardware de Nvidia, pero en el hardware de la generación actual, hay 1 FPU FP por cada 8 FP FPU. En el hardware de próxima generación, se espera que tengan más de una proporción de 1 a 2 en su lugar.

Mi recomendación sería ver si su algoritmo necesita doble precisión. Muchos algoritmos realmente no necesitan los bits adicionales. Ejecute algunas pruebas para determinar el error promedio que obtiene yendo a la precisión simple y descubra si es significativo. Si no, solo usa single.

Si su algoritmo es puramente para gráficos, probablemente no necesite doble precisión. Si está haciendo un cálculo de propósito general, considere usar OpenCL o CUDA.

+1

+1 para el consejo. Aunque me imagino que aún se mantiene (como dices, los dobles probablemente no harán una gran diferencia para los gráficos), me interesaría saber si alguna de tus respuestas ha cambiado (tal vez en términos de hardware) en los seis años. desde que lo escribiste –

+6

Las tarjetas Nvidia basadas en Maxwell tienen una diferencia aún mayor entre los cálculos de precisión simple y doble. Agregaron más unidades FP32 al costo de espacio de las unidades FP64. La precisión simple es el camino a seguir en las GPU, a menos que necesite absolutamente la mayor precisión. – tkerwin

5

Las tarjetas gráficas modernas hacen muchas optimizaciones, por ejemplo, incluso pueden funcionar en flotadores de 24 bits. Hasta donde yo sé, las tarjetas gráficas internas no usan dobles ya que están diseñadas para la velocidad, no necesariamente la precisión.

Desde la entrada en GPGPU en la Wikipedia:

Las implementaciones de punto flotante en las GPU de Nvidia son en su mayoría IEEE conforme; sin embargo, esto no es cierto en todos los proveedores. Esto tiene implicaciones para la corrección que se consideran importantes para algunas aplicaciones científicas. Mientras que los valores de punto flotante de 64 bits (flotación de doble precisión) están comúnmente disponibles en las CPU, estos no son universalmente compatibles con las GPU; algunas arquitecturas de GPU sacrifican el cumplimiento de IEEE, mientras que otras carecen por completo de precisión doble. Se han realizado esfuerzos para emular valores de punto flotante de doble precisión en GPU; sin embargo, la compensación de velocidad niega en primer lugar cualquier beneficio de descargar el cómputo en la GPU.

+3

las tarjetas gráficas más recientes ya no funcionan en flotadores de 24 bits. Los que sí lo hicieron fueron ATI R300 y derivados (basados ​​en DX9). – Bahbar

4

La mayoría de las GPU no admiten flotadores dobles en absoluto. El apoyo ha sido añadido hace muy poco (esta generación), y no en todas partes:

  • ATI:
    • HD5870 y HD5850 tienen a una velocidad decente (no tan rápido como única sin embargo)
    • HD5770 hace no lo tienen, a pesar de estar en la misma generación que el HD5870.
  • Nvidia: tarjetas basadas
    • GT200 tiene doble apoyo, pero con una relación de simple/doble que es muy baja. (¿Proporción 8: 1?)
    • Se supone que Fermi lo tiene a la mitad de la velocidad de cada ... Siempre que se envíe.

Para todo lo demás, que simplemente no tienen doble apoyo.

Entonces ... Definitivamente no debería usar el doble si no lo necesita.

Cuestiones relacionadas