2014-04-07 38 views
1

我是一個總新手,這裏是第一次嘗試測試Cuda6統一內存。編譯和運行後,我預計會得到:38,10,但我得到的結果是:5,10。有沒有什麼我做錯了,這使我在這種情況下完全愚蠢?非常感謝你們!Cuda統一內存簡單測試失敗

#include <iostream> 
#include <cuda.h> 

__global__ void add2(int *a, int *b) 
    { 
     *a += 33; 
    } 

int main(){ 

    int a = 5; 
    int b = 10; 

    int *p_a, *p_b; 

    cudaMallocManaged(&p_a,sizeof(int)); 
    cudaMallocManaged(&p_b,sizeof(int)); 

    p_a = &a; 
    p_b = &b; 

    add2<<<1,1>>>(p_a, p_b); 
    cudaDeviceSynchronize(); 

    std::cout << *p_a << " " << b << std::endl; 
    return 0; 
} 
+1

做cuda錯誤檢查。告訴我們GPU和主機平臺。 –

回答

2

cudaMallocManaged創建的分配,並設置相應的指針,像malloc。如果你然後去那個指定的指針

p_a=&a; 

你的內核將無法工作。閱讀CUDA 6編程指南中的部分,瞭解UM如何工作。

相反,你可以嘗試

*p_a=a; 

,同樣對於b。

+0

非常感謝Robert!現在我明白了,它運作良好!這是一個愚蠢的問題:-p –