首页 > 解决方案 > arg() 的 CUDA 数学库等价物是什么?

问题描述

C++ 标准库有一个名为std::arg(). 它返回其复数参数的相位角(或角度分量),以弧度表示。

我需要std::arg()在 CUDA 内核中调用类似的东西。CUDA 数学库或 CUDA 复杂数学库中是否有等效函数?

标签: mathcudacomplex-numbers

解决方案


总结和稍微扩展评论:

  • 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());
}

(另见GitHub。)......所以,atan2()也有。


推荐阅读