我是OpenCL的新手,并且已经关注了this tutorial以开始使用。创建cl::Context
之前,教程将创建三个cl_context_properties
静态数组,它并不能说明它是什么,但将其作为在cl::Context
构造的性能说法。OpenCL:cl :: Context构造函数中的属性参数是什么?
然而,当看着the reference page for cl::Context
,没有解释什么属性参数是,但它确实表示它“保留并且必须为零”。那么为什么教程发送一个非零值作为该参数?它的用途是什么?如果你之前能够通过这个论点,它是如何突然被“保留”的,这不会使OpenCL不向后兼容吗?
代码编译并运行良好,无论有没有参数。唯一的区别是我得到一个警告,cprops
未使用时,NULL
而不是cprops
。
而且,当我通过CL_DEVICE_TYPE_CPU | CL_DEVICE_TYPE_GPU
作为类型参数的构造函数cl::Context
,我的应用程序会崩溃(SIGSEGV)当我后来尝试创建与上下文cl::Buffer
。为什么?我无法指定多个设备类型同时使用吗?
更新:通过赋予NULL
的性能参数的构造函数cl::Context
,变量platformList
突然不能使用了相关的任何东西的OpenCL。本教程似乎用platformList
指定该cl::Context
要创建的平台,但现在的上下文是这样刚创建:
cl::Context context(
CL_DEVICE_TYPE_GPU,
NULL,
NULL,
NULL,
&err);
所以我没有得到指定的平台。我不应该这样做吗?它是如何发生的当我的教程似乎在做这件事时我不能这么做?
谢谢。创建上下文时我没有遇到任何错误,这就是为什么程序可以继续并创建缓冲区,否则它会退出。这也是他们在教程中所做的。 – HelloGoodbye