2017-08-30 81 views
0

我剛開始學習如何使用CUDA API和我開始與這個導入引導部分配內存時的寫入位置誤差:https://devblogs.nvidia.com/parallelforall/even-easier-introduction-cuda/我得到訪問衝突嘗試使用CUDA

我下面的教程,但我想以後與cudaMallocManaged()我想初始化數組分配內存,而是試圖初始化數組時,拋出一個異常,它說:

異常在VectorAdd.exe在0x003983D7拋出:0000005:訪問衝突寫入位置00000000。

該程序可以識別我的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; 
} 
} 

我GOOGLE了這個問題,但我沒有找到任何有效的解決方案。

+1

這個問題在你鏈接的博客文章中討論[這裏](https://devblogs.nvidia.com/parallelforall/even-easier-introduction-cuda/#comment-3457108927)。 –

回答

1

問題是我正在用x86編譯它,但是當我在x64上編譯它時,它工作得很好。它不適用於x86,因爲統一內存需要x64位操作系統。另外,如果你想在結束後使用它的結果,不要忘記在任何內核之後調用cudaDeviceSynchronize()