我写下面的代码在CUDA发出带有映射的2D到1D阵列中的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];
}
我在宿主这2D阵列我弄平一维阵列和处理在GPU但是这个代码产生分割当我尝试在主机中打印数组a时出错,但是当我在内核中注释掉b_dev[valindex]=1
行时,它会打印带有初始化零的数组a
。 visual C++调试器指示
CXX0030:无法评估错误表达式。
好心请带我走
您错误地将数据复制到和从GPU。以这种方式分配的2D阵列不能通过使用单个存储器副本直接复制。另外,不应该指定的语句是'b_dev [index] = 1;'? – sgarizvi 2013-05-08 18:08:25
雅这是b_dev [指数] = 1.这是一个错字..你可以指点我如何可以实现这个 – Stormvirux 2013-05-08 18:18:37
还是有任何其他的手段? – Stormvirux 2013-05-08 18:30:34