CUDA中exp()、expf()和__expf()的区别

15

如何在CUDA中优化exp函数?
以下在CUDA中有什么区别?

exp()
expf()
__expf()

3
这些内容都包含在CUDA编程指南的附录C中,就像您之前提出的几个与CUDA相关的问题一样。也许现在是阅读文档的时候了? - talonmies
1
现在已经包含在附录D中了。我知道这个可能会再次改变。 - kon psych
5
我喜欢他的问题,但在我看来,通过谷歌搜索并在stackoverflow上找到答案要比希望在CUDA文档中找到任何内容更加有效。 - ikku100
2个回答

21

区别在CUDA C编程指南的附录D中有解释。

  • exp()用于双精度,但应重载为单精度使用。
  • expf()用于单精度(float)。
  • __expf()是快速数学版本,性能更快但精度损失较大(取决于输入值,请参阅指南获取更多详细信息)。

1
根据链接,最大ulp误差为2 + floor(abs(1.16 * x))。你可能想把这个加到你的答案里 ;) - Ander Biguri

4

通常情况下,exp() 用于双精度浮点数,expf() 用于单精度浮点数,而两者都比可用作硬件操作的__exp() 稍微慢一些。性能提升往往以精度为代价,但除非您真的关心精度,否则这不应该是一个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接