cl_context & cl::Context 之间的区别
Difference between cl_context & cl::Context
我试图为我的OpenCL程序创建一个缓冲区。但是,该功能
clCreateBuffer
期望一个cl_context
而不是我正在使用的那个,这是cl::Context
.有什么方法可以解决这个问题,或者我在这里做错了什么?
您正在混合 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);
}
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++包装器时,还要注意引用计数。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- C++ - "!pointer"和"pointer == nullptr"的区别?
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 返回递归调用和仅递归调用的区别
- Qt:remove() 和 rmdir() 有什么区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- cl_context & cl::Context 之间的区别
- cl::程序构造函数之间的区别