当我尝试用另一个常量定义一个常量时,都存储在设备常量内存中,如:
__device__ __constant__ float x=0.1;
__device__ __constant__ float y=2*x;
我收到错误:
错误:无法为设备上的非空构造函数或析构函数生成代码
任何提示?
答案 0 :(得分:6)
__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;