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

OpenCL:cl::Context构造函数中的properties参数是什么?,opencl,Opencl,我是OpenCL的新手,并且已经开始学习了。在创建cl::Context之前,本教程将创建一个包含三个cl\u Context\u属性的静态数组,该数组没有解释它的用途,而是作为cl::Context构造函数中的properties参数发送 但是,在查看时,没有解释properties参数是什么,但它确实表示它“是保留的,必须为零”。那么为什么教程会发送一个非零值作为参数呢?它有什么用途?如果您以前能够通过这个论证,那么它是如何突然“保留”的呢?这不就是OpenCL不向后兼容的原因吗 代码在有参

我是OpenCL的新手,并且已经开始学习了。在创建
cl::Context
之前,本教程将创建一个包含三个
cl\u Context\u属性的静态数组
,该数组没有解释它的用途,而是作为
cl::Context
构造函数中的properties参数发送

但是,在查看时,没有解释properties参数是什么,但它确实表示它“是保留的,必须为零”。那么为什么教程会发送一个非零值作为参数呢?它有什么用途?如果您以前能够通过这个论证,那么它是如何突然“保留”的呢?这不就是OpenCL不向后兼容的原因吗

代码在有参数和没有参数的情况下都可以编译并运行良好。唯一的区别是,当将
NULL
放在那里而不是
cprops
时,我收到一条警告,提示
cprops
未使用

另外,当我将
CL\u DEVICE\u TYPE\u CPU | CL\u DEVICE\u TYPE\u GPU
作为类型参数传递给
CL::Context
构造函数时,当我稍后尝试使用上下文创建
CL::Buffer
时,我的应用程序将崩溃(SIGSEGV)。为什么?我不能同时指定多个设备类型吗

更新:通过将
NULL
作为
cl::Context
构造函数的属性参数,变量
platformList
突然不再用于任何与OpenCL相关的内容。本教程似乎使用
platformList
来指定应为其创建
cl::Context
的平台,但现在创建的上下文如下所示:

cl::Context context(
                CL_DEVICE_TYPE_GPU,
                NULL,
                NULL,
                NULL,
                &err);

所以我不需要指定平台。我不该这么做吗?当教程似乎在这样做时,我怎么会做呢?

关于第一个问题,请参阅OpenCL官方文档以了解此参数的描述:。这是C API,但它与C++ API相同。
至于第二个问题,您可能需要检查创建上下文的错误结果,以了解它为什么不喜欢您指定的类型参数。

谢谢。我在创建上下文时没有收到任何错误,这就是为什么程序可以继续并创建缓冲区,否则它将退出。这也是他们在教程中所做的。