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