我正在将我的 c++ 代码移植到 CUDA 和 CUBLAS。我使用 stl::complex 进行复杂计算(即 pow、log、exp 等),但我没有看到 CuComplex 库中定义的相同函数。我不知道如何创建这些功能,但我在网上找到了一些代码
#include <iostream>
#include <cublas_v2.h>
#include <cuComplex.h>
using namespace std;
typedef cuDoubleComplex Complex;
#define complex(x, y) make_cuDoubleComplex(x, y)
__host__ __device__ double cabs(const Complex& z) {return cuCabs(z);}
__host__ __device__ double carg(const Complex& z) {return atan2(cuCreal(z), cuCimag(z));}
__host__ __device__ Complex polar(const double &magnitude, const double &angle) {return complex(magnitude*cos(angle), magnitude*sin(angle));}
__host__ __device__ Complex cexp(const Complex& z) {return polar( exp(cuCreal(z)), cuCimag(z));}
__host__ __device__ Complex czlog(const Complex& z) {return complex( ::log(cabs(z)), carg(z) );}
__host__ __device__ Complex cpow(const Complex& z, const int &exponent) {return cexp( cuCmul(czlog(z), complex((double )exponent, 0)) );}
void main(void)
{
Complex z=complex(0.34, 0.56);
cout << cuCreal(cpow(z, 2)) << " " << cuCimag(cpow(z, 2)) << endl;
}
上述结果没有给出正确答案。cpow有什么问题吗?对复数执行幂和其他功能会更好吗?