Мне интересно, возможно ли создать / скопировать «виртуальный» массив определенного члена структуры в другой массив.Допустим, у нас есть структура
struct foo {
int value;
char character;
};
Теперь предположим, что есть массив, содержащий эту структуру foo
, и у меня есть операция, которая должна добавить все int value
вместе.Это обычно было бы очень легко с циклом, добавляющим все значения с указателем.Проблема в том, что я использую OpenCL и мне нужно скопировать массив на какое-либо устройство.В OpenCL это делается с помощью
clEnqueueWriteBuffer(cmdQueue, buffer, CL_TRUE, 0, datasize, A, 0, NULL, NULL);
, который скопирует массив buffer
на устройство.Не имеет смысла копировать весь массив структур, так как для этого потребуется больше времени, поскольку он также отправляет character
s, которые не нужны.Это также заняло бы больше места на устройстве OpenCL.Поэтому возможно ли скопировать «массив» из value
s из структур непосредственно в виде массива на устройство?
Я знаю, что могу создать новый массив на хосте (ЦП) со всеми значениями, а затем скопировать этот массив на устройство OpenCL, но тогда я бы потратил время на копирование в локальный массив int
изатем скопируйте этот массив на устройство OpenCL.
Можно ли скопировать "виртуальный" массив value
с непосредственно из массива foo
-структур, содержащий только int value
с?
Пожалуйста, будьте осторожны,что это очень упрощенный пример моей реальной проблемы, и я хотел бы избежать с value
в отдельном массиве с самого начала, на что структуры будут указывать.У меня есть большие сомнения, что это возможно, и если мое объяснение даже имеет смысл, но с нетерпением ждем обратной связи!