Hello everyone,
I am new to CUDA programming.
I need to write a kernel function which has exponential operation on complex numbers. What is the right way to do this?
If A is float number, in kernel, I can use exp(A) or expf(A). But how to do on complex number?
If I do :
cuComplex a;
B = expf(a);
I will have error:
error: no suitable conversion function from “cuComplex” to “float” exists
Can anyone give me any advice? Thanks
njuffa
October 23, 2011, 12:03am
2
cuComplex.h only provides complex types and basic complex arithmetic, intended to serve the needs of CUBLAS and other libraries. The complex exponential function can be computed component-wise in straightforward manner:
exp(z) = exp(x + iy) = exp(x) * exp (iy) = exp(x) * (cos(y) + i sin(y))
This then leads to code like this (untested ):
__device__ __forceinline__ cuComplex my_cexpf (cuComplex z)
{
cuComplex res;
float t = expf (z.x);
sincosf (z.y, &res.y, &res.x);
res.x *= t;
res.y *= t;
return res;
}