我在 CUDA 中编写了以下代码
__global__ void test(int *b_dev)
{
int index=blockDim.x*blockIdx.x+threadIdx.x;
b_dev[index]=1;
}
int main()
{
int **a;
int *b_dev;
a=(int**)malloc(sizeof(int*)*4);
for(i=0;i<4;i++)
a[i]=(int*)malloc(sizeof(int)*4);
//initialise array a here with 0
cudaMalloc((void**)&b_dev,sizeof(int)*16);
cudaMemcpy(b_dev,a,sizeof(int)*16,cudaMemcpyHostToDevice);
test<<<4,4>>>(dev_b);
cudaMemcpy(a,b_dev,sizeof(int)*16,cudaMemcpyDeviceToHost);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
cout<<a[i][j];
}
我在主机中有这个二维数组,我将它展平为一维数组并在 gpu 中处理,但是当我尝试在主机中打印数组 a 时,这段代码会产生分段错误,但是当我在内核中注释掉该行时b_dev[valindex]=1
,它会打印a
具有初始化零的数组。可视化 c++ 调试器表明
CXX0030:无法评估错误表达式。
请引导我