2011-08-31 17 views
10

Cómo optimizar la función exp en cuda? ¿Cuáles son las diferencias entre los siguientes en CUDA?CUDA exp() expf() y __expf()

exp() 
    expf() 
    __expf() 
+3

Todo esto se cubre en el Apéndice C de la guía de programación de CUDA, al igual que varias de sus preguntas anteriores relacionadas con CUDA. Tal vez ahora es el momento de leer la documentación? – talonmies

+1

Ahora está cubierto en [Apéndice D] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/#mathematical-functions-appendix). Sé que esto va a cambiar de nuevo alguna vez. –

+2

Me gustó su pregunta, buscando en Google y en Stackoverflow beats esperando encontrar algo en la documentación de cuda – ikku100

Respuesta

14

Las diferencias se explican en la CUDA C Programming Guide, apéndice D.

  • exp() se debe utilizar para doble precisión, aunque debe ser sobrecargado para la sola
  • expf() se debe utilizar para precisión simple (float)
  • __expf() es la versión matemática rápida, el rendimiento es más rápido con cierta pérdida de precisión (dependiendo del valor de entrada, consulte guide para obtener más información).
+1

es El máximo error de ulp es '2 + floor (abs (1.16 * x))' según el enlace. Es posible que desee agregar eso a su respuesta;) –

4

Generalmente es exp() en dobles, expf() de flotadores y ambos son ligeramente más lento que __exp() que está disponible como una operación de hardware. La ganancia de rendimiento generalmente se consigue a costa de la precisión, pero a menos que realmente esté preocupado por la precisión, no debería ser un problema.