2012-08-24 29 views
2

方面聲明裝置常數當我嘗試在其他常數來定義一個常數,都存儲在設備常量內存,如:在另一個常量

__device__ __constant__ float x=0.1; 
__device__ __constant__ float y=2*x; 

我得到的錯誤:

error: can't generate code for non empty constructors or destructors on device

任何提示?

回答

6

__constant__const不一樣。特別是,可以從主機修改一個__constant__對象。所以編譯器不能應用編譯時評估。 A __constant__對象不能在運行時從設備代碼中寫入,因此運行時初始化也是不可能的。另外,在實際的內核代碼開始執行之前,沒有可以執行這種初始化的設備的初始化例程。編譯器產生的錯誤信息似乎暗示了最後一個事實。

你可以使用定義的常量,比如:

#define MAGIC_NUMBER_1 (0.1f) 
#define MAGIC_NUMBER_2 (2.0f * MAGIC_NUMBER_1) 

__constant__ float x = MAGIC_NUMBER_1; 
__constant__ float y = MAGIC_NUMBER_2; 
相關問題