GpGpu для программиста на текущий момент выглядит так - на неком языке (все поддерживают opencl, а nvidia в частности свою cuda, но онро идеологически похоже), очень похожем на c++, пишется код, с одним callback методом, который будет вызываться последовательно и параллельно (это решит драйвер видеокарты, вы этим не почти управляете) для элементов вашего массива, который по факту - текстура в памяти (на низком уровне вы тут не заморачиваетесь) и сохраняет результат в другой.
Передача данных между обычным обычной оперативной памятью и видеокартой, объективно самая дорогая операция, и обычно стараются свести такие копирования к минимуму (т.е. на старте и под конец, для получения результата). Причем на столько, что к примеру получение содержимого экрана в оперативную память и копирование ее обратно в формате, понятному вашему cuda приложению будет занимать 99% времени если не 1099% (вы же хотите fullhd/4k 60 fps? а скорости может тупо не хватить), не говоря уже о самом преобразовании форматов.
Поэтому вам придется решить инженерную задачу, как расшарить данные между текстурой в памяти видеокарты, в которой лежит экран и вашим cuda приложением, и я боюсь это будет тот еще квест, там наверняка и права доступа весело вылезут, и привязка к чипу видеокарты и что-нибудь еще.
Если у вас получится, вам придется разработать (или найти готовый) эффективный алгоритм, кодирующий видео с использованием многоядерного процессора видеокарты (тысячи не очень шустрых процессоров), а это значит очень глубоко погрузиться в кодирование видео, на столько что вопросы в той формулировке что вы задали не появятся, ибо другой уровень знаний (повыше) для этого требуется.
p.s. nvidia уже вроде несколько лет назад пиарилась на том что разработала такие алгоритмы для эффективного стриминга экрана приложений и игр по сети с минимальной задержкой, в т.ч. в железе.
https://developer.nvidia.com/nvidia-video-codec-sdk