创建具有块大小的共享向量?
我需要创建一个共享向量,其大小与块相同。
__global__ func()
{
const int size = blockDim.x;
__shared__ float* Vec[size];
..
}
我收到此错误,
error : expression must have a constant value
我无法理解问题出在哪里,因为 blockDim.x
对于每个线程块来说都是“常量”?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您查看 __shared__ 的部分“nofollow noreferrer">CUDA C++ 编程指南,有一些关于如何为
extern
声明的共享数组指定大小的文本。虽然有点复杂,但这是如何指定执行时大小的共享数组的语法。你这样做的方式是行不通的。If you look at the section about
__shared__
of the CUDA C++ Programming Guide, there's some text on how to specify a size for anextern
declared shared array. Although it's a bit more complicated, this is the syntax on how to specify execution-time sized shared arrays. The way you're doing it won't work.据我所知,CUDA 不支持可变长度数组(这就是您在这里尝试执行的操作,无论是否存在关键字
const
)。As far as I know, CUDA does not support variable length arrays (which is what you're trying to do here, regardless of the presence of the keyword
const
).的方法(
*
)以下是删除星号
Here's how you do it
remove the star (
*
)您必须有一个支持 C99 的编译器才能使用 可变长度数组。您的编译器似乎不支持 VLA,因此您必须有一个 整数数组大小的常量表达式。
You have to have a compiler that supports C99 to use variable-length arrays. It would seem your compiler doesn't support VLAs, so you have to have an integer constant expression for your array size.