OPENCL:Cl ::上下文构造函数中的属性参数是什么



我是OpenCL的新手,并且遵循本教程开始。在创建cl::Context之前,教程会创建一个静态数组的三个cl_context_properties,它没有解释其用途,但是它以 cl::Context构造函数中的 properties 参数发送。

但是,在查看cl::Context的参考页面时,没有解释属性参数是什么,但是它确实说它"保留并且必须为零"。那么,为什么教程将非零值作为该参数发送非零值呢?它有什么目的?而且,如果您以前能够通过该论点,那么它是如何突然"保留"的,这不是使Opencl非兼容兼容吗?

代码编译并在其中有和没有参数的情况下运行正常。唯一的区别是,我警告说cprops在将NULL而不是cprops放置时未使用。

另外,当我将CL_DEVICE_TYPE_CPU | CL_DEVICE_TYPE_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);

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

在您的第一个问题上,有关此参数的描述:http://www.khronos.org/registry/cl/cl/sdk/1.1/docs/man//xhtml/。这是C API,但与C API相同。

关于您的第二个问题 - 您可能需要从创建上下文中检查错误结果,以了解为什么它不喜欢您指定的类型参数。

最新更新