gpt4 book ai didi

CUDA - 如何处理复数?

转载 作者:行者123 更新时间:2023-12-02 06:59:32 27 4
gpt4 key购买 nike

如果我想处理复数并对内核本身内的这些复数进行简单的数学运算(加法和乘法),我应该在程序中包含哪些 CUDA header ?

在 C++ 中,我可以将一个常数与一个复数 double 相乘>只要它们都是 double 。然而,在 CUDA 中,当我尝试对复杂的 double> 进行简单的数学运算时,只要它不与另一个复杂的 double> 一起使用,就会出现很多错误。我错过了什么?

谢谢!

最佳答案

要包含的 header 是:

#include <cuComplex.h>

在标准 Linux CUDA 安装上,它位于:

/usr/local/cuda/include

您将需要检查该头文件并使用其中定义的函数来操作设备上的复数。

要将(双)复数乘以实数,我会:

#include <cuComplex.h>
...
double cr = 1;
double ci = 2;
double r = 3;
cuDoubleComplex c = make_cuDoubleComplex(cr, ci);
cuDoubleComplex result = cuCmul(c, make_cuDoubleComplex(r, 0));

编辑:随着最近在 CUDA 7 RC 中发布的 Thrust v1.8,可以在 Thrust 代码 CUDA 设备代码中使用 Thrust::complex。这使得编写看起来更自然的操作成为可能,例如:

#include <thrust/complex.h>
...
thrust::complex<float> c = thrust::complex<float>(2.0f, 5.0f);
thrust::complex<float> c2 = c*c;
float r = c2.real();

编辑:在过去几年中,NVIDIA 一直在为 CUDA ( libcu++ ) 开发一个“标准”库,它模仿 std:: 的某些方面。该库包含复杂的功能,here是一个用法示例。

关于CUDA - 如何处理复数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17473826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com