2013-07-22 39 views
1

我不知道cuda不支持參考參數。有在我的程序這兩個功能:Cuda的參考參數

__global__ void 
    ExtractDisparityKernel ( ExtractDisparity& es) 
    { 
    es(); 
    } 

    __device__ __forceinline__ void 
    computeAdjacentValue (int x1, int y1, int x2, int y2, float& value) 
    { .... 
    } 

鑑於全球函數,編譯器會報告錯誤: /home/lv/pcl-trunk/gpu/kinfu_large_scale/src/cuda/estimate_combined.cu( 959):錯誤:a 全局例程不能有參考參數

我搜索了一些解決方案。有人說這是不允許的。 但設備函數不報告這種類型的錯誤。我很困惑,cuda是否支持參考論證。或者編譯器以某種方式被愚弄。

任何人都可以給這個問題的完整答案:引用是允許和不允許的?

回答

4

__global__函數的引用參數不起作用,因爲通過引用傳遞參數實際上會創建一個指針,該函數將使用該指針來引用該參數。但是,這通常會導致在設備代碼上取消引用主機指針,這是不允許的。

A __device__函數可能會使用引用參數,但是,因爲解引用設備代碼中的設備指針是合法的。

關於「解決方案」,只是傳遞一個指針:

ExtractDisparityKernel ( ExtractDisparity *es) 

,當然還有,請確保您傳遞參數是一個正確的cudaMalloc -created指針。