2011-08-31 15 views
10

Come ottimizzare la funzione exp in cuda? Quali sono le differenze tra quanto segue in CUDA ??CUDA exp() expf() e __expf()

exp() 
    expf() 
    __expf() 
+3

Questo è tutto coperto nell'appendice C della guida di programmazione CUDA, proprio come molte delle vostre precedenti domande relative CUDA. Forse ora è il momento di leggere la documentazione? – talonmies

+1

Ora è trattato in [Appendice D] (http://docs.nvidia.com/cuda/cuda-c-programming-guide/#mathematical-functions-appendix). So che questo cambierà di nuovo prima o poi. –

+2

Mi è piaciuta comunque la sua domanda, googling e trovare su stackoverflow beat nella speranza di trovare qualcosa nella documentazione di cuda imho – ikku100

risposta

14

Le differenze sono spiegate nel CUDA C Programming Guide, appendice D.

  • exp() dovrebbero essere utilizzati per doppia precisione, anche se deve essere sovraccaricato per singola
  • expf() deve essere utilizzato per singola precisione (float)
  • __expf() è la versione per la matematica veloce, le prestazioni sono più veloci con una certa perdita di precisione (in base al valore di input, vedere guide per ulteriori dettagli).
+1

is L'errore massimo di ulp è '2 + floor (abs (1.16 * x))' secondo il link. Puoi aggiungerlo alla tua risposta;) –

4

Generalmente exp() è per i doppi, expf() per carri ed entrambi sono un po 'più lento rispetto __exp() che è disponibile come un'operazione di hardware. Il guadagno in termini di prestazioni di solito ha un costo esatto ma a meno che tu non sia davvero preoccupato dell'accuratezza, non dovrebbe essere un problema.