OpenCL / C ++ - 返回一个cl :: Buffer对象

时间:2017-02-27 14:48:44

标签: c++ opencl

我有以下代码在我的GPU缓冲区中存储点云:

cl::Buffer writePointCloudToGPU(pcl::PointCloud<pcl::PointXYZ>& pointCloud){
    cl_int err;
    cl::Buffer bufferCloud(getContext(), CL_MEM_READ_WRITE, sizeof(pcl::PointXYZ) * pointCloud.size(), NULL, &err);
    getQueue().enqueueWriteBuffer(bufferCloud, CL_TRUE, 0, sizeof(pcl::PointXYZ) * pointCloud.size(), const_cast<float*> (&pointCloud.points[0].x), NULL);
    return bufferCloud;
}

当我返回cl :: Buffer时,这是否会导致内存泄漏问题?一旦我返回bufferCloud对象,程序何时调用release?

1 个答案:

答案 0 :(得分:1)

<CL/cl2.hpp> OpenCL Wrappers使用OpenCL API引用计数来跟踪您对cl::Buffer或任何其他类型的opencl对象的使用,因此虽然我不建议只删除{{{{ 1}}或cl::Buffer &左右(因为引用计数总是带来价格......)从逻辑上讲,复制这些类型是完全安全的:你可以把它们看作是{{1或者某些类似的构造,前提是您了解它们实际使用cl::Buffer const&

据我所知,其直接后果是,跨多个线程的调用不能保证引用计数。但是如果您的程序设计得当,所有对OpenCL API的调用都应该在一个专用线程上进行,这不应该是一个问题。