0

CUDA でホストからデバイスに構造体の配列をコピーしようとしています。例えば:

#define N  1000;
#define M 100000;

typedef struct {
     int i;
     float L[N];    
}t ; 

__global__ void kernel() {
  //do something
}

main () {
   t *B, *B_d;   // Pointer to host & device arrays of structure
   int size = M * sizeof(t);

   B=(t*)calloc(M,sizeof(t));
   cudaMalloc((void **) &B_d, size);   // Allocate array of structure on device
  // readind B from file ...
  cudaMemcpy(B_d, B, size, cudaMemcpyHostToDevice);
  kernel<<<1, 1 >>>();

}

そうですか?また、カーネル機能を使用するにはどうすればよいですか?

4

1 に答える 1

1

これで、カーネルがタイプ (t *) のパラメーターを受け入れると宣言し、B をカーネル呼び出しに渡すことができます。

いくつかのコメント: 1. カーネル呼び出しで 1 つのスレッドのみを使用するのは非常に効果的ではありません。最適な結果を得るには、ブロックに 32 の倍数のスレッドが必要です。2. 構造体の配列を使用すると、コードでメモリ帯域幅を効果的に使用できなくなります。最適な結果を得るには、合体読み取りを行う必要があります。

于 2012-08-30T16:59:33.500 に答える