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, и это поможет вам выбрать лучший подход к тому, что вы пытаетесь сделать. Вот несколько ссылок на полезные ресурсы:

Основы работы с буферами и аксессорами

Руководство по памяти

Пример кода, демонстрирующий хорошую практику

Другие вопросы по тегам