2014-01-25 201 views
0

我是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); 

所以我没有得到指定的平台。我不应该这样做吗?它是如何发生的当我的教程似乎在做这件事时我不能这么做?

回答

0

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

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

+0

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

相关问题