我寫下面的代碼在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