在CUDA中将结构数组从主机复制到设备

时间:2012-08-30 10:49:29

标签: cuda

我正在尝试在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 >>>();

}

是对还是不对?我怎样才能使用内核函数?

1 个答案:

答案 0 :(得分:1)

现在,您可以将内核声明为接受类型为(t *)的参数,并将B传递给内核调用。

一些评论: 1.在内核调用中仅使用1个线程是非常无效的。为获得最佳结果,您需要在块中具有32个线程的倍数。 2.拥有数组结构将不允许您的代码有效地使用内存带宽。为获得最佳结果,您需要进行合并读取。