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
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