gpt4 book ai didi

c++ - 如何在主机 C++ 函数之间传递 cl::Buffer 对象?

转载 作者:行者123 更新时间:2023-11-28 06:14:04 24 4
gpt4 key购买 nike

我将 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 对象类也是如此。

关于c++ - 如何在主机 C++ 函数之间传递 cl::Buffer 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30671134/

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