1

假设我有以下包含缓冲区的结构:

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

4

2 回答 2

1

我建议了解内存缓冲区和访问器在 SYCL 中的工作方式,这将帮助您采用最佳方法来完成您正在尝试做的事情。以下是一些有用资源的链接:

缓冲区和访问器的基础知识

记忆指南

显示良好实践的代码示例

于 2019-07-11T08:06:37.037 回答
0

这是一个如何使用嵌套占位符访问器来解决此问题的示例:Possible ComputeCPP SYCL bug reading nested buffers 如该答案中所述,位于设备缓冲区中的以下访问器不起作用,因此不可能进行多级间接访问眼下。

于 2019-07-30T13:11:39.000 回答