根据另一个常数声明设备常量

时间:2012-08-24 20:04:29

标签: cuda

当我尝试用另一个常量定义一个常量时,都存储在设备常量内存中,如:

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

我收到错误:

  

错误:无法为设备上的非空构造函数或析构函数生成代码

任何提示?

1 个答案:

答案 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;