1

私は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:エラー式を評価できません。

親切に私を導いてください

4

1 に答える 1