将 ArrayFire 与 OpenCL 一起使用时出错

Posted

技术标签:

【中文标题】将 ArrayFire 与 OpenCL 一起使用时出错【英文标题】:Error when using ArrayFire with OpenCL 【发布时间】:2016-06-07 07:48:01 【问题描述】:

我成功安装了 ArrayFire,当我选择 Visual Studio 配置 CUDA_x64 时,示例 helloworld 工作正常。但是当我更改为 OpenCL_x64 时,编译成功,但出现如下运行错误:

/**************************************************** ***********************/

ArrayFire Exception (Internal error:998):
In function __cdecl opencl::DeviceManager::DeviceManager(void)
In file src\backend\opencl\platform.cpp:329
OpenCL Error (-2): Device Not Available when calling clCreateContext

In function void __cdecl af::setDevice(const int)
In file src\api\cpp\device.cpp:91

/**************************************************** ***********************/

任何答案将不胜感激。提前致谢。

【问题讨论】:

【参考方案1】:

-2 是CL_DEVICE_NOT_AVAILABLE,“如果设备中的设备当前不可用,即使设备由 clGetDeviceIDs 返回”。您可以谷歌搜索错误的名称,并找到一些描述可能发生这种情况的网页;两种常见的情况是在旧芯片上使用英特尔 CPU 驱动程序(最新的英特尔 OpenCL SDK 需要 SSE 4.2),或者在不可用时请求 OpenCL/OpenGL 互操作。

【讨论】:

我的电脑有两个 OpenCL 平台,一个是 Intel,另一个是 NVIDIA。对于 OpenCL,可以在特定平台上查询设备。然而 ArrayFire 并没有为我们提供设置平台的 API。当我同时调用 af::getDevice() 和 af::devicecount() 时,程序会抛出异常。 然后手动创建,并将其设置为ArrayFire,它具有这样做的功能:arrayfire.org/docs/…

以上是关于将 ArrayFire 与 OpenCL 一起使用时出错的主要内容,如果未能解决你的问题,请参考以下文章

带有 ARM NEON(没有 Mali GPU)的 OpenCL 可用吗?

FPGA opencl编译aocx报错!

从 OpenCL 内核修改 VBO 数据

相邻工作项上的 OpenCL 矢量化

openCL缓存对象的传输与映射

openCL缓存对象的传输与映射