创建块大小的共享向量?

时间:2011-02-21 19:38:49

标签: c cuda

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

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

我收到此错误

  

错误:表达式必须具有常量值

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

4 个答案:

答案 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