如何在宿主c++函数之间传递cl::Buffer对象

How do I pass cl::Buffer object between host c++ functions?

本文关键字:cl Buffer 对象 之间 宿主 c++ 函数      更新时间:2023-10-16

我使用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对象?

按值将cl::Buffer传递给函数或将其作为类成员存储都是可以的。cl::Buffer类的复制构造函数只是增加底层OpenCL分配的引用计数(通过clRetainMemObject)。对于cl.hpp中的所有其他OpenCL对象类也是如此。