SYCL буферы внутри буферов
Скажем, у меня есть следующая структура, содержащая буферы:
struct SomeAllocatorCode {
int* rawData;
size_t rawDataSize;
cl::sycl::buffer<int> nestedBuffer;
SomeAllocatorCode(int* rawData, size_t size): rawData(rawData),
rawDataSize(rawDataSize), nestedBuffer(rawData, cl::sycl::range<1>(rawDataSize)) {}
};
А потом позже я хочу создать буфер следующим образом:
int* data = new int[64];
SomeAllocatorCode* allocator = new SomeAllocatorCode(data, 64);
cl::sycl::buffer<SomeAllocatorCode> topLevelBuffer(allocator,
cl::sycl::range<1>(1));
Как бы я пошел о чтении nestedBuffer
из кода устройства? Можно ли структурировать данные таким образом? Достаточно ли использовать средства доступа к данным как обычно и просто получить средство доступа к данным nestedBuffer
после доступа topLevelBuffer
используя средство чтения?
2 ответа
Вот отработанный пример того, как подойти к этому с помощью вложенных меток- заполнителей: Возможная ошибка ComputeCPP SYCL при чтении вложенных буферов Как отмечалось в этом ответе, следующие аксессоры, расположенные в буфере устройства, не работают, поэтому множественные уровни косвенности невозможны сейчас.
Я бы посоветовал понять, как работают буферы памяти и методы доступа в SYCL, и это поможет вам выбрать лучший подход к тому, что вы пытаетесь сделать. Вот несколько ссылок на полезные ресурсы: