使用c++包装器的OpenCL -如何转换cl::CommandQueue到cl_command_queue

OpenCL with c++ wrapper - how to convert cl::CommandQueue to cl_command_queue?

本文关键字:cl 转换 queue command CommandQueue 包装 c++ OpenCL 何转换 使用      更新时间:2023-10-16

我使用OpenCL与CL/CL .hpp c++包装器。所以我有c++对象,比如cl::CommandQueue而不是cl_command_queue

我也想使用AMD的BLAS库clAmdBlas。这里的函数需要一个cl_command_queue作为它们的参数之一。

如何从cl::CommandQueue得到cl_command_queue ?

要获得cl_command_queue对象,只需使用()操作符:

cl::CommandQueue cppQueue;
...
cl_command_queue queue = cppQueue();

同样适用于此头文件中包装OpenCL运行时对象的所有其他c++对象。

cl.hpp中,cl::CommandQueue的定义如下:

class CommandQueue : public detail::Wrapper<cl_command_queue>

detail::Wrapper<T>定义如下:

template <typename T>
class Wrapper
{
public:
    typedef T cl_type;
protected:
    cl_type object_;
public:
    cl_type operator ()() const { return object_; }
    cl_type& operator ()() { return object_; }
    ...
};

所以你可以这样做:

cl::CommandQueue commandQueue = cl::CommandQueue(...);
cl_command_queue queue = commandQueue();