CUDA中是否有模板化的数学函数?

5
我一直在寻找CUDA中的模板化数学函数,但似乎找不到。在普通的C++中,如果我调用std::sqrt,它是模板化的,并且将根据参数是float还是double执行不同版本。
我希望CUDA设备代码也有类似的功能。我的内核将实际类型作为模板参数传递,现在我必须选择在float和double之间使用sqrtfsqrt。我认为thrust可能具有此功能,但它只适用于复数。

4
一般而言,CUDA是C++的子集。在CUDA中,标准的数学函数会根据参数类型进行重载,因此您可以编写 sqrt(float) 来计算单精度平方根,或者 sqrt(double) 来计算双精度平方根。我相信这在CUDA文档中有详细说明。 - njuffa
有一个名为 thrust 的库,它实现了一些模板函数。 - Tarek Dakhran
我添加了一个简短的回答,总结了评论并删除了回答,以便使其获得回答。如果这个答案得到了赞或被接受,我会很感激,这样它就不会在未回答的队列中了。 - talonmies
1个回答

1

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

简而言之; 是的

原始的基于Open64的工具链在2008-2009年期间增加了不错的模板支持(使得像Komrade和后来的Thrust这样的东西成为可能),现代前端实际上是C++的一个合适子集。因为模板支持和主机C++编译已经被嵌入到工具链中自CUDA 2开发周期的某个时候以来,支持代码和数学库已经发展成为一个完全基于模板的重载系统。

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

这在CUDA文档here中有记录。


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