opencl 1.1 中的 memcpy

memcpy in opencl 1.1

opencl中有没有memcpy之类的机制。我想在 gpu 上复制一个指针结构,因为我们不能将它们直接从主机复制到设备,所以我决定为每个指针创建单独的缓冲区,然后将它们放在设备上的一个结构中。所以,我想要一种像 memcpy 这样的机制来将数据从一个缓冲区复制到另一个缓冲区。有这样的吗?

struct Grid_gpu {
  cl_uint3  dims;
  cl_uint* elements_beg_index;
  cl_uint n_element_cells;
  cl_uint* element_cells;
};

因此,为此,我在我的设备上定义了一个结构,如下所示:

typedef struct {
    uint3 dims;
    __global uint* element_begIndices;
    __global uint n_element_cells;
    __global uint* element_cells;
} Grid;

然后我就用下面的内核来填充Grid类型的内存:

// a kernel to fill a grid acceleration structure.
__kernel void fill_grid_accel(
    uint3 dims,
    __global uint* element_begIndices,
    uint n_element_cells,
    __global uint* element_cells,
    __global Grid* grid){

    grid->dims.x = dims.x;
    grid->dims.y = dims.y;
    grid->dims.z = dims.z;


    grid->element_begIndices = element_begIndices;
    grid->n_element_cells = n_element_cells;
    grid->element_cells = element_cells;
}

现在,grid内存中包含的指针已被填充为所需的data.s