memcpy在opencl 1.1中

时间:2015-03-26 17:05:15

标签: opencl c99

在opencl中是否有像memcpy这样的机制。我想在gpu上复制一个指针结构,因为我们不能直接从主机到设备复制它们,所以我决定为每个指针创建sepeprate缓冲区,然后将它们全部放在设备的一个结构中。所以,我希望有一个像memcpy这样的机制将数据从一个缓冲区复制到另一个缓冲区。有什么类似的吗?

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

1 个答案:

答案 0 :(得分:0)

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

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内存包含指针填充了所需的数据。