我一直在 cuda 中寻找模板化数学函数,但似乎找不到。在普通的 C++ 中,如果我调用std::sqrt
它是模板化的,并且将根据参数是浮点数还是双精度数来执行不同的版本。
我想要这样的 CUDA 设备代码。我的内核将真实类型作为模板参数传递,现在我必须在使用sqrtf
float 和sqrt
double之间进行选择。我认为推力可能具有此功能,但它仅适用于复数。
[将评论、已删除的答案和一些附加历史记录转换为答案,以将其从 CUDA 标签的未答复队列中删除,请根据需要进行编辑和修改]
太长了;是的
最初的基于 Open64 的工具链在 2008-2009 年间添加了不错的模板支持(使得 Komrade 和后来的 Thrust 之类的东西成为可能),而现代前端实际上是 C++ 的一个适当的子集。由于模板支持和主机 C++ 编译自 CUDA 2 开发周期的某个时间起就已融入到工具链中,因此支持代码和数学库已在完全基于模板的重载系统中发展。
因此,CUDA 中的标准数学函数会根据参数类型进行重载,因此您可以编写代码sqrt(float)
来计算单精度平方根,或sqrt(double)
计算双精度平方根。
此处的CUDA 文档对此进行了记录。