В OpenCL 1.x подобные вещи в принципе невозможны. Вам нужно будет преобразовать ваши данные так, чтобы они помещались в один буферный объект или, по крайней мере, в фиксированное количество буферных объектов. Указатели на хосте не имеют смысла на устройстве. (С помощью функции SVM в OpenCL 2 вы можете передавать значения указателя между кодом хоста и ядра, но вам все равно нужно убедиться, что память выделена таким образом, который подходит для этого.)
Один вариант, который я могу себе представить Принимая во внимание, что я ничего не знаю об остальной части вашей программы, выглядит так:
- Создайте буфер OpenCL для всех строк. Сложите количество байтов, необходимое для всех ваших строк. (возможно, включая нулевое завершение, в зависимости от того, что вы пытаетесь сделать)
- Создать буфер для поиска смещений начала строки (и, возможно, длины). Похоже, у вас есть 2 измерения поиска (вложенные векторы), поэтому то, как вы их раскроете, будет зависеть от того, все ли ваши внутренние векторы (второе измерение) одинакового размера или нет.
- Пишите ваши строки обратно в обратно в первый буфер, смещения начала записи (и длину, если необходимо) во втором буфере.