我需要创建一个共享矢量,与块大小相同。
__global__ func() { const int size = blockDim.x; __shared__ float* Vec[size]; .. }
我得到这个错误
error : expression must have a constant value
我不明白问题出在哪里,因为blockDim.x对于每个线程块都是“常量”?
blockDim.x
yzxexxkh1#
如果您查看CUDA C++编程指南中关于__shared__的部分,其中有一些关于如何为extern声明的共享数组指定大小的文本。尽管有点复杂,但这是关于如何指定执行时大小的共享数组的语法。你这样做是行不通的。
__shared__
extern
wlsrxk512#
据我所知,CUDA不支持可变长度数组(这就是你在这里要做的,不管关键字const是否存在)。
const
omhiaaxx3#
你要这么做
__shared__ float Vec[size];
删除星星(*)
*
dsekswqp4#
你必须有一个支持C99的编译器才能使用variable-length arrays。看起来你的编译器不支持VLA,所以你必须有一个integer constant expression作为你的数组大小。
4条答案
按热度按时间yzxexxkh1#
如果您查看CUDA C++编程指南中关于
__shared__
的部分,其中有一些关于如何为extern
声明的共享数组指定大小的文本。尽管有点复杂,但这是关于如何指定执行时大小的共享数组的语法。你这样做是行不通的。wlsrxk512#
据我所知,CUDA不支持可变长度数组(这就是你在这里要做的,不管关键字
const
是否存在)。omhiaaxx3#
你要这么做
删除星星(
*
)dsekswqp4#
你必须有一个支持C99的编译器才能使用variable-length arrays。看起来你的编译器不支持VLA,所以你必须有一个integer constant expression作为你的数组大小。