В Си и Си++ extern означает external linkage. Если вкратце, то это обещание компилятору, что переменная будет определена в другой единице трансляции, а пока он может её использовать как будто она есть. Адреса устанавливаются на этапе компоновки в исполняемый файл (или библиотеку). В CUDA extern __shared__ означает, что размер будет определён при запуске ядра.
Если вкратце, то это обещание компилятору, что переменная будет определена в другой единице трансляции, а пока он может её использовать как будто она есть