Ваш вопрос не на 100% ясен, поэтому я кратко изложу свое понимание ситуации, прежде чем ответить:
У вас есть buffer_of_strings
, который содержит N
строк по length_of_string
байтов. Это означает, что каждая строка начинается со смещения i * length_of_string
в буфере:
+--------length_of_string--------+
| | | |
<----+----><----+----><----+----><----+---->
"String0 String1 Str2 String3 "
^ ^ ^
| | |
0 (1 * length_of_string) (3 * length_of_string)
Так что это приводит меня к чему-то вроде этого с простой старомодной арифметикой указателей:
__kernel void myKernel(global char *buffer_of_strings, char length_of_string, global char *output_buffer) {
uint offset = get_global_id(0) * length_of_string;
global char *string_input = buffer_of_strings + offset;
Function(string_input, length_of_string, output_buffer);
}
Убедитесь, что все ваши указатели помечены соответствующей областью памяти. (global
в этом случае)