инициализатор не разрешен для переменной __shared__ для cuda - PullRequest
5 голосов
/ 24 декабря 2011

Я делаю следующее:

__shared__ int exForBlockLessThanP = totalElementLessThanPivotEntireBlock[blockIdx.x];

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

1 Ответ

7 голосов
/ 24 декабря 2011

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

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

...