我需要创建一个共享向量,其大小与块相同。
__global__ func()
{
const int size = blockDim.x;
__shared__ float* Vec[size];
..
}
我收到此错误
错误:表达式必须具有常量值
我无法理解问题出在哪里,因为blockDim.x
对于每个块线程都是“常量”?
答案 0 :(得分:1)
据我所知,CUDA不支持可变长度数组(无论是否存在关键字const
,这都是你在这里尝试做的)。
答案 1 :(得分:1)
如果你看一下CUDA C编程指南的B.16节,那里有一些关于如何为extern
声明的共享数组指定大小的文本。虽然它有点复杂,但这是关于如何指定执行时大小的共享数组的语法。你这样做的方式是行不通的。
答案 2 :(得分:1)
这是你如何做的
_ 分享 _ float Vec [size];
删除星号(*)
答案 3 :(得分:0)
您必须拥有支持C99的编译器才能使用variable-length arrays。您的编译器似乎不支持VLA,因此您必须为数组大小设置integer constant expression。