gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:16:45 24 4
gpt4 key购买 nike

我有以下代码在我的 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?

最佳答案

<CL/cl2.hpp> OpenCL Wrappers 使用 OpenCL API 引用计数来跟踪您对 cl::Buffer 的使用情况或任何其他类型的 opencl 对象,所以虽然我不建议只放弃对 cl::Buffer & 的所有使用或 cl::Buffer const&等等(因为引用计数总是有代价的……)从逻辑上讲,复制这些类型是完全安全的:您可以将它们视为 std::shared_ptr<cl_mem> 的包装器。或一些类似的构造,前提是您了解它们不是实际上使用std::shared_ptr .

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

关于c++ - OpenCL/C++ - 返回一个 cl::Buffer 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42488693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com