Создание общего вектора с размером блока? - PullRequest
1 голос
/ 21 февраля 2011

Мне нужно создать общий вектор того же размера, что и блок.

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

Я получаю эту ошибку

ошибка: выражение должно иметь постоянное значение

Я не могу понять, в чем проблема, так как blockDim.x является "константой" для каждого блока потоков ??

Ответы [ 4 ]

1 голос
/ 24 февраля 2011

Вот как ты это делаешь

_ shared _ float Vec [размер];

удалить звездочку (*)

1 голос
/ 21 февраля 2011

Насколько я знаю, CUDA не поддерживает массивы переменной длины (это то, что вы пытаетесь сделать здесь, независимо от наличия ключевого слова const).

1 голос
/ 21 февраля 2011

Если вы посмотрите на раздел B.16 Руководства по программированию CUDA C, там есть текст о том, как указать размер объявленного общего массива extern. Хотя это немного сложнее, это синтаксис о том, как указать разделяемые массивы времени выполнения. То, как вы это делаете, не сработает.

0 голосов
/ 21 февраля 2011

У вас должен быть компилятор, который поддерживает C99 , чтобы использовать массивы переменной длины .Казалось бы, ваш компилятор не поддерживает VLA, поэтому вам нужно иметь целочисленное константное выражение для вашего размера массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...