如何解决与 arg() 等效的 CUDA 数学库是什么?
C++ 标准库有一个名为 std::arg()
的函数。它返回其复数参数的相位角(或角分量),以弧度表示。
我需要在 CUDA 内核中调用 std::arg()
之类的东西。 CUDA Math 库或 CUDA Complex Math 库中是否有等效函数?
解决方法
总结并稍微扩展评论:
- CUDA 数学库不直接支持复数值的
arg()
函数。 -
cuComplex.h
非常简陋。正如@njuffa 指出的那样:它只有 CUBLAS 和 CUFFT 需要的东西。 - 您可以而且应该使用
atan2(y,x)
(或std::atan2(y,x)
),其中y
是虚部,x
是实部。
那么,推力呢? thrust::complex<T>
到底有没有 arg()
方法?
嗯,这就是它的实现方式:
template <typename T>
__host__ __device__
T arg(const complex<T>& z)
{
// Find `atan2` by ADL.
using std::atan2;
return atan2(z.imag(),z.real());
}
(另见 on GitHub。)...所以,atan2()
也有。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。