问题描述
我有以下结构:
enum BoundSide { right,left,top,bottom,back,front };
template<typename T,size_t D>
using vec = array<T,D>;
//fpr short and static Vector Fields like c_i
template<typename T,size_t D,size_t Q>
using vec_set = vec<vec<T,D>,Q>;
template<typename T,size_t D>
struct VELociTY_BOUND_DEV;
template<typename T>
struct VELociTY_BOUND_DEV<T,2>
{
BoundSide side;
int center{};
int width{};
T u_w; //veLocity
};
template<typename T,int D,int Q>
struct SimDomain_dev
{
vec_set<T,D,Q> c; //discrete veLocity-set
vec<T,Q> w; //discrete weights
vec<grid_size_t,D> gridDim_L;
VELociTY_BOUND_DEV<T,D> bound;
}
我像这样声明了一个 __constant__
变量:
template<typename T,int Q>
__constant__ SimDomain_dev<T,Q> sd_dev;
然后我将数据从临时主变量复制到设备变量,如下所示:
cudamemcpyToSymbol(sd_dev<T,SimDomain<T,D>::Q>,&sd_temp,sizeof(SimDomain_dev<T,D>::Q>))
vec
和 vec_set
中的 Class 数组是一个容器类,它在设备端工作(有效)。
那么,为什么我收到错误“__constant__
变量不支持动态初始化”?
解决方法
int center{};
int width{};
初始化 center
和 width
,此外,根据 vec
和 vec_set
的定义方式,它们可能有自己的构造函数。