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

Tar*_*rek 2 cuda

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

__device__ __constant__ float x=0.1;
__device__ __constant__ float y=2*x;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

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

任何提示?

nju*_*ffa 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;
Run Code Online (Sandbox Code Playgroud)