我想像在 CPU 上一样在 GPU 上使用 2D 数组。因此下面的代码。它执行没有错误,但返回一些垃圾值。
谁能建议我可能出了什么问题...!
谢谢你。
#include<stdio.h>
__global__ void add2(int** da)
{
int idx=threadIdx.x;
int idy=threadIdx.y;
da[idx][idy]+=2;
// printf("It came here");
printf("%d \n",da[idx][idy]);
}
int main()
{
int ha[2][2],**da, hb[2][2];
size_t pitch;
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
ha[i][j]=0;
}
cudaMallocPitch((void**)&da, &pitch, 2*sizeof(int),2);
cudaMemcpy2D(&da, 2*sizeof(int), ha, pitch, 2*sizeof(int), 2, cudaMemcpyHostToDevice);
printf("Before kernel\n");
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
printf("%d ",ha[i][j]);
printf("\n");
}
printf("\n");
add2<<<2,2>>>(da);
// gpuErrchk(cudaPeekAtLastError());
// gpuErrchk(cudaDeviceSynchronize());
cudaMemcpy2D(&hb, 2*sizeof(int), da, pitch, 2*sizeof(int), 2, cudaMemcpyDeviceToHost);
printf("After kernel\n");
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
printf("%d ",hb[i][j]);
printf("\n");
}
return 0;
}