2011-12-24 4 views
5

CUDA Я делаю следующее:инициализатор не допускается __shared__ переменной для

__shared__ int exForBlockLessThanP = totalElementLessThanPivotEntireBlock[blockIdx.x]; 

где totalElementLessThanPivotEntireBlock является массивом на GPU. Компилятор бросает ошибку, как указано в названии вопроса. Я действительно не понимаю, почему это проблема?

ответ

7

Статическая инициализация общих переменных является незаконной в CUDA. Проблема в том, что семантика того, как каждый поток должен обрабатывать статическую инициализацию разделяемой памяти, не определен в модели программирования. Какой поток должен писать? Что произойдет, если значение не равномерно между потоками? Как должен компилятор испускать код для такого случая и как его использовать?

В своем бессмысленном примере вы просите каждую нить в блоке инициализировать одну и ту же общую переменную со значением - в основном статически скомпилированную гонку памяти.

+1

ТАК, какой правильный метод ??? – Programmer

+0

примечание PLease. В приведенном выше, я прошу каждый поток в блоке присваивать exForBlockLessThanp то же значение – Programmer

+0

Использовать условный оператор, чтобы один поток выполнял инициализацию в начале ядра – talonmies

 Смежные вопросы

  • Нет связанных вопросов^_^