4

ホスト コードとデバイス コードの両方で複素数を使用する方法を理解しようとしています。私は遭遇しましcuComplexた(しかし、ドキュメントが見つかりません!)、float2少なくともCUDAプログラミングガイドで言及されています。

何を使えばいいですか?のヘッダーファイルではcuComplex、関数が で宣言されているように見える__host__ __device__ので、どちらの場所でも使用できるという意味だと思います。

私の元のデータはファイルからに読み込まれているstd::complex<float>ので、それを台無しにしたくありません。GPU で複雑な値を使用するには、元の値complex<float>からcuComplex?にコピーする必要があると思います。

4

3 に答える 3

6

cuComplex/usr/local/cuda/include/cuComplex.h(インストールディレクトリをモジュロ)で定義されています。関連するスニペット:

typedef float2 cuFloatComplex;
typedef cuFloatComplex cuComplex;
typedef double2 cuDoubleComplex;

複素数を操作するための便利な関数もあります-乗算、構築など。

float2またはを使用するかどうかについてcuComplexは、意味的に適切な方を使用する必要があります。それはベクトルですか、それとも複素数ですか? また、複素数の場合は、cuFloatComplexorcuDoubleComplexを完全に明示することを検討してください。

于 2011-01-27T06:12:07.160 に答える
2

cuBLAS または cuFFT を使用する場合は、cuComplex を使用する必要があります。独自の関数を作成する場合、どちらも 2 つの float の構造であるため、パフォーマンスに違いはありません。

于 2011-01-27T02:58:30.767 に答える
0

IIRC、float2 は 2 つの数値の配列です。cuComplex (名前だけから) は、CUDA の複雑な形式のように聞こえます。

この投稿は、cuComplex の詳細を見つける場所を示しているようです: http://forums.nvidia.com/index.php?showtopic=81514

于 2011-01-27T00:29:11.277 に答える