首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cl_context &cl::上下文的区别

cl_context &cl::上下文的区别
EN

Stack Overflow用户
提问于 2016-01-23 12:19:04
回答 2查看 1.8K关注 0票数 0

我试图为我的OpenCL程序创建一个缓冲区。然而,该功能

代码语言:javascript
复制
clCreateBuffer

期望得到一个cl_context,而不是我正在使用的那个cl::Context。有什么办法解决这个问题,或者我在这里做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-23 18:29:18

您正在将OpenCL C (clCreateBuffer)与C++ API (cl::Context)混合。不要这样做,坚持使用C或C++。

如果您已经有了一个cl::Context,那么您应该坚持使用C++ API。相应的创建缓冲区的调用(例如,为100个浮点数)将是:

代码语言:javascript
复制
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);
}
票数 3
EN

Stack Overflow用户

发布于 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++包装时,还要注意引用计数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34963355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档