- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不明白为什么我会收到错误 dynamic initialization is not supported for __device__, __constant__, __shared__ variables
编译我的代码时。
我的代码看起来像
wrapper.cu
#include "../Params.hpp"
__constant__ Params cparams;
void wrapperFunction(uint& a)
{
Params ab;
a = 20;
}
#include "Utils.hpp"
typedef struct Params
{
vectorTypef a;
} Params;
#include "Vec2.hpp"
typedef unsigned int uint;
typedef Vec2<float> vectorTypef;
template <typename T>
class Vec2
{
public:
Vec2(){ x = 0.0; y = 0.0;}
T x, y;
};
CUDA_ADD_EXECUTABLE(test main.cpp cudasrc/wrapper.cu
最佳答案
您的 Params
struct 用于 __constant__
cparams
的内存定义.
您的 Params
结构体包含一个元素 a
类型 vectorTypef
这是 Vec2
的 typedef float
的类(class).此类有一个默认构造函数,即最终分配 Params
的元素。结构。这种将数据分配给 __constant__
的方法区域在设备代码或主机代码中都不合法。
在设备代码中修改 __constant__
是不合法的值。在主机代码中(这是这里的 View ),__constant__
应使用适当的 API 分配值,即 cudaMemcpyToSymbol
.我建议您在主机代码中明确分配这些,而不是通过构造函数。
因此,解决此问题的一种可能方法是将默认构造函数更改为空构造函数:
public:
__host__ __device__ Vec2(){ }; // change this line
T x, y;
wrapperFunction
中)中,初始化您的
Params
__constant__
结构:
Params hparams;
hparams.a.x = 0.0;
hparams.a.y = 0.0;
cudaMemcpyToSymbol(cparams, &hparams, sizeof(Params));
关于cuda - 为什么我的 __device__、__constant__、__shared__ 不支持动态初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27041820/
我正在执行以下操作: __shared__ int exForBlockLessThanP = totalElementLessThanPivotEntireBlock[blockIdx.x]; 其中
我不明白为什么我会收到错误 dynamic initialization is not supported for __device__, __constant__, __shared__ varia
给出了如何在 CUDA 中使用动态分配并因此使用外部共享内存的示例:Use dynamic shared memory allocation for two different vectors
我正在尝试静态初始化 GPU 内存中的只读 std::map 变量,如下所示: // EXAMPLE 1: using namespace std; // first attempt: __devic
我是一名优秀的程序员,十分优秀!