C语言 创建具有块大小的共享向量?

mwg9r5ms  于 2023-05-12  发布在  其他
关注(0)|答案(4)|浏览(97)

我需要创建一个共享矢量,与块大小相同。

__global__ func()
{   
    const int size = blockDim.x;
    __shared__ float* Vec[size];
..
}

我得到这个错误

error : expression must have a constant value

我不明白问题出在哪里,因为blockDim.x对于每个线程块都是“常量”?

yzxexxkh

yzxexxkh1#

如果您查看CUDA C++编程指南中关于__shared__的部分,其中有一些关于如何为extern声明的共享数组指定大小的文本。尽管有点复杂,但这是关于如何指定执行时大小的共享数组的语法。你这样做是行不通的。

wlsrxk51

wlsrxk512#

据我所知,CUDA不支持可变长度数组(这就是你在这里要做的,不管关键字const是否存在)。

omhiaaxx

omhiaaxx3#

你要这么做

__shared__ float Vec[size];

删除星星(*

dsekswqp

dsekswqp4#

你必须有一个支持C99的编译器才能使用variable-length arrays。看起来你的编译器不支持VLA,所以你必须有一个integer constant expression作为你的数组大小。

相关问题