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

发布于 2024-10-18 21:50:10 字数 295 浏览 5 评论 0 原文

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

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

我收到此错误,

error : expression must have a constant value

我无法理解问题出在哪里,因为 blockDim.x 对于每个线程块来说都是“常量”?

I need to create a shared vector, with the same size as the block.

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

I get this error

error : expression must have a constant value

I cannot understand where the problem is, since blockDim.x is "constant" for each block of threads?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

喜你已久 2024-10-25 21:50:10

如果您查看 __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 an extern 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.

流殇 2024-10-25 21:50:10

据我所知,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).

你在看孤独的风景 2024-10-25 21:50:10

的方法(*)

__shared__ float Vec[size];

以下是删除星号

Here's how you do it

__shared__ float Vec[size];

remove the star (*)

北城半夏 2024-10-25 21:50:10

您必须有一个支持 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文