缓冲区中的SYCL缓冲区

时间:2019-07-09 18:50:56

标签: c++ 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 个答案:

答案 0 :(得分:0)

我建议您了解SYCL中的内存缓冲区和访问器如何工作,这将帮助您采用最佳方法进行尝试。 以下是一些有用资源的链接:

Basics on buffers and accessors

Memory guide

Code sample showing good practice

答案 1 :(得分:0)

这是一个使用嵌套占位符访问器解决此问题的示例:Possible ComputeCPP SYCL bug reading nested buffers 如该答复所述,位于设备缓冲区中的后续访问器不起作用,因此目前无法进行多级间接访问。