问题0:
cuComplex.h是否支持exp()?
问题1:
如何编写A=B*exp(i*C),其中A、B、C是相同大小的实数数组?是这样吗?
主要:
cuComplex A;
float B;
cuComplex c;
内核:
c[idx] = ( 0, C[idx] );
A[idx] = B[idx] * exp( c[idx] );
问题2:
cuComplex包含2个浮点数,这意味着我必须为原始矩阵分配2倍的内存。有没有办法创造纯虚数?
最佳答案
h只提供了对cuComplex的一些基本操作(主要是在CUBLAS和CUFFT库中使用的操作),不支持指数函数。
您可以使用组件运算自己实现指数。cuComplex在x分量中存储复数的实部,在y分量中存储虚部给定复数z=x+i*y,指数可以计算为:
exp(z)=exp(x)*(cos(y)+i*sin(y))
这将导致以下CUDA代码(未测试):
cuComplex my_complex_exp (cuComplex arg)
{
cuComplex res;
float s, c;
float e = expf(arg.x);
sincosf(arg.y, &s, &c);
res.x = c * e;
res.y = s * e;
return res;
}