cl_context 和 cl::Context 之间的区别
Difference between cl_context & cl::Context
我试图为我的 OpenCL 程序创建一个缓冲区。但是,函数
clCreateBuffer
需要一个 cl_context
而不是我正在使用的 cl::Context
。
有什么方法可以解决这个问题,或者我在这里做错了什么?
cl_context
是 OpenCL 上下文的 low-level 类型(来自 cl.h),而 cl::Context
来自 OpenCL C++ 包装器(cl.hpp ).要从 cl::Context
类型的对象中获取 cl_context
,请使用 operator()
。例如,如果您的上下文变量是 "foo",要将其传递给 clCreateBuffer
,请使用 clCreateBuffer(foo(), flags, ...)
.
我发现您最好使用 C API 或 C++ 包装器,但不要同时使用两者,因为在它们之间进行转换会令人困惑 and/or 乏味。从 low-level 类型构造 C++ 包装器时还要注意引用计数。
您将 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);
}
我试图为我的 OpenCL 程序创建一个缓冲区。但是,函数
clCreateBuffer
需要一个 cl_context
而不是我正在使用的 cl::Context
。
有什么方法可以解决这个问题,或者我在这里做错了什么?
cl_context
是 OpenCL 上下文的 low-level 类型(来自 cl.h),而 cl::Context
来自 OpenCL C++ 包装器(cl.hpp ).要从 cl::Context
类型的对象中获取 cl_context
,请使用 operator()
。例如,如果您的上下文变量是 "foo",要将其传递给 clCreateBuffer
,请使用 clCreateBuffer(foo(), flags, ...)
.
我发现您最好使用 C API 或 C++ 包装器,但不要同时使用两者,因为在它们之间进行转换会令人困惑 and/or 乏味。从 low-level 类型构造 C++ 包装器时还要注意引用计数。
您将 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);
}