device端定义常量数组可以初始化吗?

while(iterSech<maxSech)
{

kernel<<<dimGrid,dimBlock>>>( … ,step_d+iterSech,…);

}
step_d 是一个常量数组,在函数外面这样定义了step_d
device double step_d[8]={0.5,0.25,0.125,0.06250,0.03125,0.015625,0.0078125,0.0039065};
但是编译出现这样的错误:expression must have integral or enum type
请问一下这是什么原因呢?

LZ您好:

__device__定义的数组/变量是device端的全局数组/变量,无需通过参数传递,直接在kernel中可以访问。您可以在kernel中通过下标来选择您需要的数据。

以及,此类数组/变量称为Symbol,有一些特殊处理。

如果您想使用kernel参数的方法访问,那么您需要使用API函数cudaGetSymbolAddress()来获得Symbol的实际地址,然后作为参数传递给kernel使用。

大致如此,供您参考。

感谢深夜来访,祝您编码舒心~

这个ICE已说的很清楚了,但是看到楼主没有回应。应该是没有看懂,那么我再简单的解释下:

您的要求(device 的初始化)是可以的。

但您的这个要求和您当前犯的错误无关。您这个问题不是因为初始化而报错的,而是您需要在kernel里直接使用该数组或者真不想改,您需要使用cudaGetSymbolAddress后,您再进行指针变换。

请您思考这点。
感谢来访。