Выделение памяти для такого массива не является проблемой, вы сделаете это с помощью cudaMalloc (sizeof (void *) * SIZE). Однако, запись правильных значений в это главная проблема. Единственный способ изменить значения в памяти устройства из функции хоста - это на самом деле копирование информации из памяти хоста в память устройства (cudaMemcpy () или cudaMemcpyToSymbol ()). Таким образом, чтобы записать указатели устройства в память устройства, у нас должен быть указатель на память устройства в памяти хоста, что я не считаю возможным. (указатель, который хранится в переменных хоста, выделенных cudaMalloc (), не является фактическим указателем в памяти устройства). Таким образом, единственный способ записать правильные значения в массив - из ядра, что делает неудобным массив указателей.
Я предлагаю использовать указатели вместо указателей, это намного лучше. По сути, если в вашем массиве индексов вы написали {4,3,0,1,2}, это означает, что первый элемент указывает на некоторый массив в индексе 4, второй - на третий элемент и так далее. Если вы хотите указать несколько массивов, вы должны выполнить индексацию по некоторому правилу, в котором вы будете заполнять массив индексов и в котором вы будете получать доступ к памяти из ядра.