我正在使用OpenCL和C ++包装器,使用GPU进行繁重的计算。
数据位于cl :: Buffer对象中,例如
std::vector<float> host_z_vec(100, 0.0f);
cl::Buffer device_z_vec;
device_z_vec = cl::Buffer(*context_ptr,
CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
sizeof(float)*host_z_vec.size(),
&host_z_vec.at(0),
&status);
我应该如何在主机c ++函数之间传递cl :: Buffer对象device_z_vec? - 我不想复制device_z_vec,只是传递它。
void run_on_gpu(cl::Buffer device_z_vec){ ... }
或
void run_on_gpu(const cl::Buffer& device_z_vec){ ... }
这可以吗?
class StoreBuffer{
cl::Buffer device_z_vec;
public:
cl::Buffer provide_access_to_device_z_vec(){ return device_z_vec; };
}
或者我应该将指针传递给cl :: Buffer对象吗?
答案 0 :(得分:1)
按值将cl::Buffer
传递给函数或将其存储为类成员都可以。 cl::Buffer
类的复制构造函数只是递增底层OpenCL分配的引用计数(通过clRetainMemObject
)。 cl.hpp
中的所有其他OpenCL对象类也是如此。