所以我试图将一个锯齿状数组从主机复制到设备。首先这里是我目前对cudaMalloc和cudaMemcpy的理解:
cudaMalloc 获取指向内存块指针的指针。
cudaMemcpy 需要一个指向要复制到或从中复制的内存块的指针。
如果我错了,请纠正我。
现在这是我的代码不起作用(编译正常但没有输出):
__global__ void kernel(int** arr)
{
for (int i=0; i<3; i++)
printf("%d\n", arr[i][0]);
}
int main()
{
int arr[][3] = {{1},{2},{3}}; // 3 arrays, 1 element each
int **d_arr;
cudaMalloc((void**)(&d_arr), sizeof(int*)*3); // allocate for 3 int pointers
for (int i=0; i<3; i++)
{
cudaMalloc( (void**) &(d_arr[i]), sizeof(int) * 1 ); // allocate for 1 int in each int pointer
cudaMemcpy(d_arr[i], arr[i], sizeof(int) * 1, cudaMemcpyHostToDevice); // copy data
}
kernel<<<1,1>>>(d_arr);
cudaDeviceSynchronize();
cudaDeviceReset();
}
那么我在这里做错了什么?干杯