我试图为我的OpenCL程序创建一个缓冲区。然而,该功能
clCreateBuffer期望得到一个cl_context,而不是我正在使用的那个cl::Context。有什么办法解决这个问题,或者我在这里做错了什么?
发布于 2016-01-23 18:29:18
您正在将OpenCL C (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);
}发布于 2016-01-23 14:46:08
cl_context是OpenCL上下文的低级类型(来自cl.h),而cl::Context来自OpenCL C++包装器(cl.hpp)。要从类型为cl::Context的对象获取cl::Context,请使用operator()。例如,如果上下文变量为"foo",则将其传递给clCreateBuffer使用clCreateBuffer(foo(), flags, ...)。
我发现您最好使用C++或C++包装器,但不能同时使用,因为它们之间的转换会变得混乱和/或乏味。在从低级类型构造C++包装时,还要注意引用计数。
https://stackoverflow.com/questions/34963355
复制相似问题