我正在尝试在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 >>>();
}
是对还是不对?我怎样才能使用内核函数?
答案 0 :(得分:1)
现在,您可以将内核声明为接受类型为(t *)的参数,并将B传递给内核调用。
一些评论: 1.在内核调用中仅使用1个线程是非常无效的。为获得最佳结果,您需要在块中具有32个线程的倍数。 2.拥有数组结构将不允许您的代码有效地使用内存带宽。为获得最佳结果,您需要进行合并读取。