2014-03-04 89 views
1

對於錯誤的標題,我很抱歉... 我想要一個靜態屬性值的類,我可以在設備代碼中使用它。我試圖有何如下:作爲類的靜態屬性的常量內存符號

struct MyConstValue 
{ 
    static __constant__ int value; 
}; 

從理論上說,現在,我應該定義MyConstValue ::價值,對其進行初始化,可能通過cudaMemcpyToSymbol,然後我可以寫,通過MyGlobalValue::value訪問這個值的內核。

如果我添加

int __constant__ MyConstValue::value; 

定義符號(既沒有__constant__)的緣故,NVCC輸出

error: ‘static’ may not be used when defining (as opposed to declaring) a static data member [-fpermissive] 

有沒有執行我的想法呢?

我使用CUDA 5.5,目標計算能力> 2.0。

在此先感謝。

回答

3

CUDA中不支持靜態類成員。

原因可能是,如果所有線程都會這樣做,或者只有一個線程,並且如果是的話,哪個線程沒有被初始化的定義點。所以靜態數據在這種情況下是沒有意義的。

NVIDIA forum

但是,什麼會是「類的靜態成員」成語甚至在GPU上的意思嗎?它 不能與GPU相同,因爲有太多關於 其定義的新問題。也許每個線程都有自己的靜態成員,如果該線程訪問該類的多個副本,即使是 ?每塊有 單個靜態成員?每個內核?每個DEVICE,因爲類 在內核調用以外的內存中生存?

從B CUDA節目指南的2.2:

恆定限定符,任選地與設備一起使用時, 聲明的變量具有:

寓於恆定存儲器空間,是否可以從網格中的所有線程和主機 通過運行時庫(cu)訪問應用程序的生存期( ) daGetSymbolAddress()/ 運行時API的cudaGetSymbolSize()/ cudaMemcpyToSymbol()/ cudaMemcpyFromSymbol() ,驅動程序API的cuModuleGetGlobal())。

你可以看看this thread

+0

所以,答案是否定的,我不能這樣做。我將不得不尋找另一種解決方案。非常感謝! – Spiros