cuda中有模板化的数学函数吗

Are there templated math functions in cuda?

本文关键字:函数 cuda      更新时间:2023-10-16

我一直在cuda中寻找模板化的数学函数,但似乎找不到。在普通c++中,如果我调用std::sqrt,它将被模板化,并将根据参数是浮点还是双精度执行不同的版本。

我想要这样的CUDA设备代码。我的内核将real类型作为模板参数传递,现在我必须在使用sqrtf表示float和使用sqrt表示double之间进行选择。我原以为推力可能有这个特性,但它只适用于复数。

[将注释、已删除的答案和一些额外的历史记录转换为答案,以将其从CUDA标签的未应答队列中删除,请根据需要进行编辑和修改]

TLDR;是

最初的基于Open64的工具链在2008-2009年期间添加了不错的模板支持(使Kotrade和后来的Thrust成为可能),而现代前端实际上是C++的一个子集。由于从CUDA2开发周期的某个阶段开始,模板支持和主机C++编译就已经融入了工具链,因此支持代码和数学库已经在一个完全基于模板的重载系统中发展。

因此,CUDA中的标准数学函数是根据参数类型重载的,因此可以编写sqrt(float)来计算单精度平方根,或者编写sqrt(double)来计算双精度平方根。

CUDA文档中对此进行了说明。