OpenCL:cl :: Context构造函数中的属性参数是什么?

时间:2014-01-25 20:44:20

标签: opencl

我是OpenCL的新手,并且已经跟随this tutorial开始了。在创建cl::Context之前,教程会创建一个三个cl_context_properties的静态数组,它不会解释它的用途,但是它作为属性参数发送给它。 cl::Context构造函数。

然而,在查看the reference page for cl::Context时,没有解释属性参数是什么,但它确实说它“保留并且必须为零”。那么为什么教程会将非零值作为参数发送?它有什么用途?如果您以前能够通过该论证,它是如何突然“保留”的,是不是会使OpenCL不向后兼容?

代码在有和没有参数的情况下编译并运行良好。唯一的区别是,在cprops放置NULL而不是cprops时,我收到CL_DEVICE_TYPE_CPU | CL_DEVICE_TYPE_GPU未使用的警告。

此外,当我将cl::Context作为类型参数传递给cl::Buffer构造函数时,当我稍后尝试使用上下文创建NULL时,我的应用程序将崩溃(SIGSEGV)。为什么?我无法指定多个设备类型同时使用吗?

更新:通过将cl::Context作为platformList构造函数的属性参数,变量platformList突然不再用于OpenCL相关的任何内容。本教程似乎使用cl::Context来指定应为其创建cl::Context context( CL_DEVICE_TYPE_GPU, NULL, NULL, NULL, &err); 的平台,但现在上下文就是这样创建的:

{{1}}

所以我没有指定平台。我不应该这样做吗?当教程似乎这样做时,我怎么做不到?

1 个答案:

答案 0 :(得分:0)

关于第一个问题,请参阅官方OpenCL文档以获取此参数的说明:http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/。这是C API,但它与C ++ API相同。

关于你的第二个问题 - 你可能想要检查创建上下文的错误结果,看看为什么它不喜欢你指定的类型参数。