c++ - 在cuda中声明共享内存的大小

标签 c++ cuda shared-memory

<分区>

我的代码在 cuda c/c++ 中看起来像这样(共享内存的大小取决于其他参数;即不是所有问题都是常数):

__global__ void dist(){
     int a=4; int b=2;
     const int d=a+b;
    __shared__ short unsigned int shared_nodes[a];
}

程序无法运行并显示错误消息:“错误:常数值未知。”你知道我该如何解决这个问题吗?

最佳答案

如果要动态分配共享内存的大小,只要先声明共享内存,启动时给出大小即可:

extern __shared__ char array[];
__global__ void shared_memory_1(float* result, int shared_size)
{
    float* sh_data = (float*)array; 
    float* sh_data2 = (float*)&sh_data[shared_size]; 
    ...
}

就像描述的图片: enter image description here

关于c++ - 在cuda中声明共享内存的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21010090/

相关文章:

struct - 如何创建 LLVM 结构值?

docker - 在没有--privileged选项的情况下在Docker容器中挂载shm

c - 在共享内存中初始化一维或二维数组

c++ - 如何获取从 C++ 中的特定类继承的所有已声明类的列表

c++ - 使用 std::array 移植 C++ 代码以使用 CUDA 推力的简单方法?

c++ - 错误 : no member named 'getMat' in 'cv::face::FaceRecognizer'

gcc - Cuda Clang 和 OS X Mavericks

mysql - 当尝试更改表时,我收到 "The table ' some table' is full”。为什么?

c++ - 这种优化是否是编译器错误?

c++ - 具有阈值函数的 OpenCV3 错误