Думайте об общей памяти как о явно управляемом кеше.Вам нужно будет хранить ваш массив в глобальной памяти и кэшировать его части в разделяемой памяти по мере необходимости, делая несколько проходов или какую-то другую схему, которая минимизирует количество загрузок и сохраняет в / из глобальной памяти.
То, как вы реализуете это, будет зависеть от вашего алгоритма - если вы можете дать некоторые подробности того, что именно вы пытаетесь реализовать, вы можете получить более конкретные предложения.
И последний момент - помните, что разделяемая память совместно используется между всеми потоками в блоке - у вас есть менее 16 КБ на поток, если у вас нет единой структуры данных, которая является общей для всех потоков в блоке.