当我尝试用另一个常量定义一个常量时,都存储在设备常量内存中,如:
__device__ __constant__ float x=0.1;
__device__ __constant__ float y=2*x;
Run Code Online (Sandbox Code Playgroud)
我收到错误:
错误:无法为设备上的非空构造函数或析构函数生成代码
任何提示?
__constant__
是不一样的const
.特别是,__constant__
可以从主机修改对象.因此编译器无法应用编译时评估.甲__constant__
对象不能在运行时从设备内码写的,所以运行时初始化也是不可能的.此外,在实际内核代码开始执行之前,没有可以执行此类初始化的设备的init例程.编译器产生的错误消息似乎暗示了最后一个事实.
您可以使用定义的常量,例如:
#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;
Run Code Online (Sandbox Code Playgroud)