问题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;
}

08-16 01:05