0

ダブル ポインター オブジェクトをホストにコピーし、GPU デバイスで計算したいと考えています。デバイスに対してオブジェクトの cudaMemcpy を実行すると、SEGFAULT がスローされます。

BMP Input;
Input.ReadFromFile( fileName );
WIDTH = Input.TellWidth();
HEIGHT = Input.TellHeight();
RGBApixel** imageData = new RGBApixel* [HEIGHT];
for (int i = 0; i < HEIGHT; i++) 
    imageData[i] = new RGBApixel [WIDTH];

for(int j=0;j<Input.TellHeight();j++){
    for(int i=0;i<Input.TellWidth();i++){
      imageData[j][i] = Input.GetPixel(i,j);
    }
  }
long long imageSize = WIDTH*HEIGHT*sizeof(RGBApixel *);

RGBApixel** dev_imgdata,dev_imgdata_out;
//Allocating cudaMemory
cudaMalloc( (void **) &dev_imgdata, imageSize );
cudaMalloc( (void **) &dev_imgdata_out, imageSize );

今、以下の行はsegfaultをスローします

cudaMemcpy(dev_imgdata,imageData,imageSize,cudaMemcpyHostToDevice);
4

2 に答える 2

0

また、プログラムをコンパイルするときは、必ず -arch sm_20 を使用して、グラフィック カードの追加オプションを有効にしてください (Capability 2.0 の場合)。それがなければ double を使用することはできず、結果は予測できません (または double が float に縮小されます)。

于 2014-11-17T07:23:06.497 に答える