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 回答