Opencl 使用clCreateSubBuffer

Opencl 使用clCreateSubBuffer,opencl,Opencl,我试图使用createsubbuffer来读取从一维向量创建的缓冲区块。这是我正在使用的代码: d_treeArray = clCreateBuffer(context, CL_MEM_READ_WRITE, sizeof(cl_uint)*total,NULL,&err); cl_buffer_region region; region.origin = 0; // This works //region.origin = 4; // This doesnt work region.s

我试图使用createsubbuffer来读取从一维向量创建的缓冲区块。这是我正在使用的代码:

d_treeArray = clCreateBuffer(context, CL_MEM_READ_WRITE, sizeof(cl_uint)*total,NULL,&err);
cl_buffer_region region;
region.origin = 0; // This works
//region.origin = 4; // This doesnt work
region.size = 10*sizeof(cl_uint);
d_subtreeArray = clCreateSubBuffer(d_treeArray,CL_MEM_READ_WRITE,CL_BUFFER_CREATE_TYPE_REGION, &region, &err);
if(err != CL_SUCCESS) {
      std::cout << "Cannot set buffers" << std::endl;
      exit(1);
}

现在,当我将region.origin指定为除0以外的任何值时,我得到了-13错误CL_INVALID_值,根据帮助,这意味着区域原点和大小超出了缓冲区的范围。这可能是什么原因?

我认为错误代码-13表示CL\u未对齐\u SUB\u缓冲区\u偏移。确保偏移量与设备的“CL_device_MEM_BASE_ADDR_ALIGN”对齐。该值通常介于1024和4096之间

我认为错误代码-13表示CL\u未对齐\u SUB\u缓冲区\u偏移。确保偏移量与设备的“CL_device_MEM_BASE_ADDR_ALIGN”对齐。该值通常介于1024和4096之间

多谢各位。读取错误代码是我的错误。因此,如果偏移量未对齐,我们无法创建子缓冲区?不,未对齐的偏移量不能用于创建子缓冲区,也不能用于缓冲区操作。如果算法允许,从内核访问缓冲区时可以使用偏移量。您可能需要考虑使用某些较小的对齐方式来确保最佳内存访问。偏移量未对齐的含义是什么?假设我有一个大小为[66*46*46]的对象。现在我想把它分为66个46*46的对象。目前我的AMD卡上有-13错误。这意味着N*46*46的偏移量不能被CL_DEVICE\u MEM\u BASE\u ADDR\u ALIGN整除?还有,如何检查此值?谢谢。读取错误代码是我的错误。因此,如果偏移量未对齐,我们无法创建子缓冲区?不,未对齐的偏移量不能用于创建子缓冲区,也不能用于缓冲区操作。如果算法允许,从内核访问缓冲区时可以使用偏移量。您可能需要考虑使用某些较小的对齐方式来确保最佳内存访问。偏移量未对齐的含义是什么?假设我有一个大小为[66*46*46]的对象。现在我想把它分为66个46*46的对象。目前我的AMD卡上有-13错误。这意味着N*46*46的偏移量不能被CL_DEVICE\u MEM\u BASE\u ADDR\u ALIGN整除?还有,如何检查此值?