Math arg()的CUDA数学库等效于什么? C++标准库有一个函数叫做它返回复数参数的相位角(或角度分量),以弧度表示

Math arg()的CUDA数学库等效于什么? C++标准库有一个函数叫做它返回复数参数的相位角(或角度分量),以弧度表示,math,cuda,complex-numbers,Math,Cuda,Complex Numbers,我需要在CUDA内核中调用类似于std::arg()。CUDA数学库或CUDA复杂数学库中是否有等效函数?对注释进行小结和扩展: CUDA数学库不直接支持复杂值的arg()函数 cuComplex.h非常初级。正如@njuffa所指出的:它只有库布拉斯和库夫特所需要的 您可以也应该使用atan2(y,x)(或std::atan2(y,x)),其中y是虚部,而x是实部 那么,推力呢推力::complex毕竟有一个arg()方法吗 这就是它的实现方式: template <typename

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

对注释进行小结和扩展:

  • CUDA数学库不直接支持复杂值的
    arg()
    函数
  • cuComplex.h
    非常初级。正如@njuffa所指出的:它只有库布拉斯和库夫特所需要的
  • 您可以也应该使用
    atan2(y,x)
    (或
    std::atan2(y,x)
    ),其中
    y
    是虚部,而
    x
    是实部
那么,推力呢<代码>推力::complex
毕竟有一个
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());
}
模板
__主机设备__
T参数(常数复合体和z)
{
//通过ADL查找'atan2'。
使用std::atan2;
返回atan2(z.imag(),z.real());
}

(另见……)。。。因此,
atan2()
这里也有。

要对注释进行总结和扩展:

  • CUDA数学库不直接支持复杂值的
    arg()
    函数
  • cuComplex.h
    非常初级。正如@njuffa所指出的:它只有库布拉斯和库夫特所需要的
  • 您可以也应该使用
    atan2(y,x)
    (或
    std::atan2(y,x)
    ),其中
    y
    是虚部,而
    x
    是实部
那么,推力呢<代码>推力::complex毕竟有一个
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());
}
模板
__主机设备__
T参数(常数复合体和z)
{
//通过ADL查找'atan2'。
使用std::atan2;
返回atan2(z.imag(),z.real());
}

(另见……)。。。因此,
atan2()
也在那里。

我查看了
cuComplex.h
,它没有退出。CUDA对复数只有基本的支持;基本上是库布拉斯和库夫特所要求的。您可以轻松地将函数计算为arg(x+iy)=atan2(y,x)。CUDA支持C++标准数学函数<代码> ATAN2()<代码>。我只是做了一些类似的事情,它起了作用:double myPhaseAngle=atan2(cuCimag(myComplexDouble),cuCreal(myComplexDouble));是的,也就是说,它不需要广泛使用其他推力构造。CUDA对复数只有基本的支持;基本上是库布拉斯和库夫特所要求的。您可以轻松地将函数计算为arg(x+iy)=atan2(y,x)。CUDA支持C++标准数学函数<代码> ATAN2()<代码>。我只是做了一些类似的事情,它起了作用:double myPhaseAngle=atan2(cuCimag(myComplexDouble),cuCreal(myComplexDouble));是的,也就是说,它不需要广泛使用其他推力结构。