2011-07-08 18 views
4

CUDAの専門家、私はホスト・コードに新しいタイプ定義した場合:CUDAの__device__

struct float_3{ 
float x; 
float y; 
float z; 
}; 

を、私は、デバイスへのこのタイプのいくつかのデータを転送してきた、私はそれの__device__のコールを作成することができます新しいタイプ、つまり:

__device__ float_3 foo(float_3 r,float b,int a){ 
} 

どのタイプの__device__を作成できますか?または、ちょうどintfloatdloublevoidなど... そして、__device__にポインタを戻すことは可能ですか?すなわち __device__ float_3* foo(){}

答えて

7

はい、任意のタイプの__device__を作成できます。これは、関数をコンパイルしてデバイス上で実行し、デバイスから呼び出し可能にする修飾子です。

そして、CUDAはfloat3タイプです。私はそれを一度も使用したことはありませんが、正しくリコールすれば、あなたのfloat_3と同じ機能を提供し、コンストラクタも付属しています。

+5

CUDAのfloat3型も正しいアラインメント宣言を持ちますが、別の利点があります。 – harrism

2

__device__を作成できますか?

短い答えははいです。長い答えは、ユーザーがfloat_3のようなユーザー定義の型の場合、cudaMallocを使用して__device__変数ポインタを定義し、デバイスにメモリを割り当てることができます。

デバイスにポインタを返すことは可能ですか?

はい、できます。