2011-11-22 60 views
3

關於我遇到的鏈接和多重定義函數時遇到的另一個問題,我想簡單地將我的cuda代碼包裝在單例類中。具有私有全局內核方法的C++類

沿

class Singleton{ 
public: 
    __host__ void doSomething(); 
private: 
    __global__ void someKernel(); 
}; 

即顯然只裝置可用於方法和上面給出「無效存儲器限定符的組合」的東西。我想將我的代碼包裝在一個類中以獲得更多結構化的代碼,但是如果我需要從外部放置每個內核,則沒有多大意義。

同樣的問題已經在NVIDIA的網站先前提出的,但沒有一個答案 http://forums.nvidia.com/index.php?showtopic=176623

我也理解與這個指針的問題,但即使是靜態方法不能是全球性的。

+1

這裏真的有問題嗎? CUDA語言不允許在類中使用'__global__'聲明,大多數原因與內核無法調用內核的原因相同,並且不支持外部鏈接。工具鏈和硬件都不能做任何支持這些事情所需的東西。 – talonmies

+0

儘管它們看起來很優雅,但它們是不好的選擇。繼續使用靜態方法或全局函數,它們可以幫助您調用對象及其功能。因此,您也可以維護狀態(如果需要) – sarat

回答

1

如果你想調用代碼看起來更加有組織,你可以從方法調用你的內核,如果有幫助的話。

+0

是的靜態成員應該沒問題。無論如何,我打算通過參數將各種設備指針傳遞給內核。 – JoeTaicoon

+0

我其實並沒有看到你問題中的最後一行,所以我的回答變得毫無用處。對於那個很抱歉。 – Vlad

+0

寫道「從一個方法調用你的內核」。想想看,在類中使用靜態內核方法或者在類外部使用內核函數時,使用C++在ah文件中定義類並在cpp文件或cu文件中實現它的方式會產生很大差異。 – JoeTaicoon