13

カーネル内で複素数を操作し、これらの複雑な倍精度数に対して単純な算術演算 (加算と乗算) を実行する場合、プログラムにどの CUDA ヘッダーを含める必要がありますか?

C++ では、両方が double である限り、定数に複雑な double> を掛けることができます。ただし、CUDA では、単純な数学演算を複雑な double> に対して実行しようとすると、別の複雑な double> を使用していないときはいつでも、多くのエラーが発生します。私は何が欠けていますか?

ありがとうございました!

4

1 に答える 1

19

含めるヘッダーは次のとおりです。

#include <cuComplex.h>

標準の Linux CUDA インストールでは、次の場所にあります。

/usr/local/cuda/include

そのヘッダー ファイルを検査し、その中で定義されている関数を使用して、デバイスで複素数を操作する必要があります。

(倍精度の) 複素数に実数を掛けるには、次のようにします。

#include <cuComplex.h>
...
double cr = 1;
double ci = 2;
double r = 3;
cuDoubleComplex c = make_cuDoubleComplex(cr, ci);
cuDoubleComplex result = cuCmul(c, make_cuDoubleComplex(r, 0));

EDIT : CUDA 7 RC で最近リリースされた Thrust v1.8 では、thrust::complex を推力コードまたはCUDA デバイス コードで使用できます。これにより、次のようなより自然に見える操作を記述できます。

#include <thrust/complex.h>
...
thrust::complex<float> c = thrust::complex<float>(2.0f, 5.0f);
thrust::complex<float> c2 = c*c;
float r = c2.real();
于 2013-07-04T15:52:02.810 に答える