2017-08-30 4 views
0

を使用してメモリを割り当てるしようとしたとき、私はちょうどCUDA APIを使用する方法を学び始め、私は、この導入ガイドで開始し、アクセス違反の書き込み場所のエラーを取得する:私はチュートリアルを次のですが、私はしようとしています後https://devblogs.nvidia.com/parallelforall/even-easier-introduction-cuda/私はCUDA

私は配列を初期化したいcudaMallocManaged()でメモリを割り当てますが、配列を初期化しようとすると、例外が言うこれ、スローされます。VectorAdd.exeに0x003983D7で投げ

例外:0xc0000005で:アクセス違反の書き込み場所0x00000000の。

プログラムで自分のGPUを識別できます。私はCUDAデバイスとGPUをすべて書き込む関数を作成したので、そのことが分かります。

これはチュートリアルに示されているのと同様に、私のコードです:

int main(void) 
{ 
PrintCudaDevices(); 

int N = 1 << 20; //1M elements 

float *x, *y; 

cudaMallocManaged(&x, N * sizeof(float)); 
cudaMallocManaged(&y, N * sizeof(float)); 

for (int i = 0; i < N; i++) 
{ 
    x[i] = 1.0f; 
    y[i] = 2.0f; 
} 
} 

私はその問題をグーグルが、私は任意の実用的なソリューションを見つけることができませんでした。

+1

問題は、あなたがリンクしたブログ記事の[ここ](https://devblogs.nvidia.com/parallelforall/even-easier-introduction-cuda/#comment-3457108927)で議論されています。 –

答えて

1

問題は私がx86でコンパイルしていたことでしたが、x64でコンパイルするとうまくいきました。統合メモリにはx64ビットOSが必要なため、x86では動作しませんでした。さらに、カーネルの後でその結果を使いたい場合は、cudaDeviceSynchronize()に電話することを忘れないでください。

関連する問題