cl_context&的区别CL ::上下文

时间:2016-01-23 12:19:04

标签: c++ buffer opencl

我正在尝试为我的OpenCL程序创建一个Buffer。但是,功能

clCreateBuffer

需要cl_context而不是我正在使用的cl::Contextready callback。 这有什么方法,或者我在这里做错了什么?

2 个答案:

答案 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);
}