我正在尝试为我的OpenCL程序创建一个Buffer。但是,功能
clCreateBuffer
需要cl_context
而不是我正在使用的cl::Context
,ready callback
。
这有什么方法,或者我在这里做错了什么?
答案 0 :(得分:3)
cl_context
是OpenCL上下文的低级类型(来自cl.h),而cl::Context
来自OpenCL C ++包装器(cl.hpp)。要从cl_context
类型的对象获取cl::Context
,请使用operator()
。例如,如果您的上下文变量为“foo”,则将其传递给clCreateBuffer
使用clCreateBuffer(foo(), flags, ...)
。
我发现你最好使用C API或C ++包装器,但不能同时使用它们,因为在它们之间进行转换会让人感到困惑和/或乏味。当从低级类型构造C ++包装器时,还要注意引用计数。
答案 1 :(得分:2)
您正在将OpenCL C API(clCreateBuffer
)与C ++ API(cl::Context
)混合使用。不要这样做,坚持使用C或C ++。
如果您已经有cl::Context
,那么您应该坚持使用C ++ API。创建缓冲区的相应调用(例如,100个浮点数)将是:
cl::Context context(...); // your context creation
cl_int err;
cl::Buffer my_buffer(context, CL_MEM_READ_WRITE, sizeof(cl_float)*100, NULL, &err);
if (err != CL_SUCCESS) {
std::cerr << "ERROR: create buffer (" << err << ")" << std::endl;
exit(1);
}