私は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];
}
ホストにこの 2 次元配列があり、これを 1 次元配列として平坦化し、gpu で処理しますが、ホストで配列を印刷しようとすると、このコードによってセグメンテーション違反が発生しますが、カーネルで行b_dev[valindex]=1
をコメントアウトすると、a
初期化されたゼロを持つ配列。ビジュアル C++ デバッガーは、
CXX0030:エラー式を評価できません。
親切に私を導いてください