cuComplex.h и exp () - PullRequest
       8

cuComplex.h и exp ()

1 голос
/ 25 марта 2012

Q0:

Поддерживается ли exp () cuComplex.h?

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 раза больше памяти, чем для исходной матрицы. есть ли способ создать чисто мнимое число?

1 Ответ

7 голосов
/ 25 марта 2012

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...