【发布时间】:2021-07-09 08:35:36
【问题描述】:
我有以下结构:
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 D, int Q>
__constant__ SimDomain_dev<T, D, Q> sd_dev;
然后我将数据从临时主机变量复制到设备变量,如下所示:
cudaMemcpyToSymbol(sd_dev<T, D, SimDomain<T, D>::Q>, &sd_temp,0, sizeof(SimDomain_dev<T,D, SimDomain<T, D>::Q>))
vec 和 vec_set 中的 Class 数组是一个在设备端工作的容器类(有效)。
那么,为什么我会收到错误消息“__constant__ 变量不支持动态初始化”?
【问题讨论】:
-
vec_set和vec是什么?我猜想有一个构造函数试图在某个地方运行。你不能这样做 -
您的编辑没有回答问题。他们有构造函数吗?
-
这些是类类型数组的别名。这个容器是 std.:array 的替代品,也可以在设备上使用。