2

当我尝试根据另一个常量定义一个常量时,它们都存储在设备常量内存中,如下所示:

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

我得到错误:

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

有什么提示吗?

4

1 回答 1

6

__constant__不一样const。特别是,__constant__可以从主机修改对象。所以编译器不能应用编译时评估。无法在__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;
于 2012-08-25T01:30:24.787 回答