cuComplex.h和exp()

use*_*071 1 c cuda

Q0:

是否由cuComplex.h支持exp()?

Q1:

如何写A = B*exp(i*C),其中A,B,C是相同大小的实数数组?这是正确的吗?

主要:

cuComplex A;
float B;
cuComplex c;
Run Code Online (Sandbox Code Playgroud)

核心:

c[idx] = ( 0, C[idx] );

A[idx] = B[idx] * exp( c[idx] ); 
Run Code Online (Sandbox Code Playgroud)

Q2:

cuComplex包含2个浮点数,这意味着我必须为原始矩阵分配2倍的内存.有没有办法创造纯虚数?

nju*_*ffa 7

cuComplex.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;
}
Run Code Online (Sandbox Code Playgroud)