Вы не можете объявить разделяемую переменную следующим образом.
__shared__ int a[count];
хотя, если вы достаточно уверены в максимальном размере массива a, вы можете напрямую объявить как
__shared__ int a[100];
но в этом случае вас должно беспокоить количество блоков в вашей программе, так как фиксация разделяемой памяти в блоке (и неполное использование) приведет к переключению контекста с глобальной памятью (высокая задержка), таким образом, низкая производительность ...
Есть хорошее решение этой проблемы, чтобы объявить
extern __shared__ int a[];
и выделение памяти при вызове ядра из памяти, как
Kernel<<< gridDim, blockDim, a_size >>>(count)
но вам также следует беспокоиться, потому что, если вы используете больше памяти в блоках, чем выделяете в ядре, вы получите неожиданные результаты.