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

cha*_*255 5 c++ cuda

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

我想要这样的 CUDA 设备代码。我的内核将真实类型作为模板参数传递,现在我必须在使用sqrtffloat 和sqrtdouble之间进行选择。我认为推力可能具有此功能,但它仅适用于复数。

tal*_*ies 1

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

太长了;是的

最初的基于 Open64 的工具链在 2008-2009 年间添加了不错的模板支持(使得 Komrade 和后来的 Thrust 之类的东西成为可能),而现代前端实际上是 C++ 的一个适当的子集。由于模板支持和主机 C++ 编译自 CUDA 2 开发周期的某个时间起就已融入到工具链中,因此支持代码和数学库已在完全基于模板的重载系统中发展。

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

此处的CUDA 文档对此进行了记录。