math - arg() 的 CUDA 数学库等价物是什么?
问题描述
C++ 标准库有一个名为std::arg()
. 它返回其复数参数的相位角(或角度分量),以弧度表示。
我需要std::arg()
在 CUDA 内核中调用类似的东西。CUDA 数学库或 CUDA 复杂数学库中是否有等效函数?
解决方案
总结和稍微扩展评论:
- 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()
也有。
推荐阅读
- javascript - 父元素和子元素的单独 onClick 事件
- android - 安卓条码扫描模块
- java - Keycloak java更改临时密码
- python - 如何使用 argparse Python 在 SQL 查询中传递日期范围参数
- c# - UdpClient 构造函数抛出 SocketException NotInitialized
- python - 如何将此语法错误转换为正确的 if else
- php - xero API:努力添加基本发票
- reactjs - 如何在反应材料-ui DataGrid中格式化单元格
- c# - 如何在子元素中绑定属性?
- python - 如何使用python找到它们之间有空格的大写字母字符