在CUDA中复制二维阵列

在CUDA中复制二维阵列,cuda,Cuda,我试图将2D数组从CPU复制到GPU。从主机端我发送2D数组的基指针,p是一维中的元素数 int *d_a; cudaMalloc(d_a,P*P*sizeof(int)); copyKernelHostToDevice((int(*)[P])d_a,(int(*)[P])hAligned_a); copyKernelHostToDevice((int(*)[P])d_b,(int(*)[P])hAligned_b); inline void copyKernelHostTo

我试图将2D数组从CPU复制到GPU。从主机端我发送2D数组的基指针,p是一维中的元素数

 int *d_a;

 cudaMalloc(d_a,P*P*sizeof(int));

 copyKernelHostToDevice((int(*)[P])d_a,(int(*)[P])hAligned_a);

 copyKernelHostToDevice((int(*)[P])d_b,(int(*)[P])hAligned_b);


 inline void copyKernelHostToDevice(int (*A)[P],int (*B)[P]){

      for(int i=0;i<P;i++)
      cutilSafeCall(cudaMemcpyAsync(A[i],B[i],P*sizeof(int),cudaMemcpyHostToDevice));

}
int*d_a;
Cudamaloc(d_a,P*P*sizeof(int));
copyKernelHostToDevice((int(*)[P])d_a,(int(*)[P])hAligned_a);
copyKernelHostToDevice((int(*)[P])d_b,(int(*)[P])hAligned_b);
内联无效copyKernelHostToDevice(int(*A)[P],int(*B)[P]){

对于(int i=0;i它看起来像
d_a
不是有效的设备指针,因为您的
cudamaloc
调用看起来不正确。它应该是这样的:

int *d_a;
cudaMalloc((void **)&d_a,P*P*sizeof(int));

如果您得到一个无效的参数错误,它可能意味着B[i]不是有效的设备指针。您可以编辑您的问题来解释分配B的位置,以及您使用的CUDA版本吗?a和B之间的主机指针数组和设备指针数组是哪一个?您是否使用cudaMalloc为设备指针数组中的所有P指针分配了设备内存?我在上面添加了主机端代码,d_a是设备基本上,我在GPU上分配1D数组,并通过类型转换将其用作2D数组it@user997704:这没有多大帮助。你能告诉我指针是在哪里定义和分配的吗?@user997704:Your
cudamaloc
调用可能是错误的。你能确认这就是你真正使用的代码吗?@user997704:Trust me,它确实会让你感到不安非常大的区别。你能详细说明一下吗?我很想知道…也许一些例子或理论可以…解释你调用Cudamaloc的错误(这相当于在另一个函数中调用malloc)。