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

时间:2016-03-24 00:07:50

标签: c++ cuda

我一直在寻找cuda的模板化数学函数,我似乎无法找到它。在普通的c ++中,如果我调用std :: sqrt它是模板化的,并且如果参数是float或double,将执行不同的版本。对于cuda设备代码我想要这样的东西。我的内核将实际类型作为模板参数传递,现在我必须在使用sqrtf for float和sqrt for double之间进行选择。我认为推力可能有这个功能,但它只适用于复杂的数字。

1 个答案:

答案 0 :(得分:1)

[将评论,已删除的答案和一些其他历史记录转换为答案,以使它脱离CUDA标签的未答复队列,请根据需要编辑和修改]

TLDR;是

最初的基于Open64的工具链在2008-2009年期间添加了不错的模板支持(使诸如Komrade和后来的Thrust之类的事情成为可能),而现代前端确实是C ++的适当子集。由于自CUDA 2开发周期以来就已经将模板支持和主机C ++编译纳入了工具链,因此支持代码和数学库已在完全基于模板的重载系统中发展。

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

这已在CUDA文档here中进行了记录。