- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在最终设法让我的代码用 OpenCL 编译之后,我似乎无法让输出二进制文件运行!这是在我运行 Kubuntu 13.10 x64 的 Linux 笔记本电脑上
我得到的错误是(打印自 cl::Error):
ERROR: clGetPlatformIDs
-1001
我找到了 this post但似乎没有明确的解决办法。
我将自己添加到视频组,但这似乎不起作用。
关于 ICD 配置文件...我不确定我需要做什么 - 这不应该包含在 cuda 工具包中吗?如果没有,我在哪里可以下载一个?
编辑:我的系统中/usr/share/nvidia-331/nvidia.icd 下似乎有一个 ICD 文件。它包含以下文本:
libnvidia-opencl.so.1
我的系统中唯一与此类似的文件是:
/usr/lib/nvidia-331/libnvidia-opencl.so.331.20
我的 ICD 配置文件有什么问题吗?有谁知道解决它的方法吗?
最佳答案
(Mods:我不确定是否应该将此帖子移至 AskUbuntu,因为它是与 Linux bumblebee 相关的问题而不是 OpenCL 本身?)
好的,经过大量努力,我设法解决了这个问题。
我需要做两件事:
创建一个从/usr/share/nvidia-331/nvidia.icd 到/etc/OpenCL/vendors 的符号链接(symbolic link)
sudo ln -s /usr/share/nvidia-331/nvidia.icd /etc/OpenCL/vendors
注意:在大多数情况下,您需要将 nvidia-331 替换为您正在使用的任何驱动程序 - 最常见的是 nvidia-current
我真的很好奇为什么在安装 cuda 工具包时没有自动完成 - 但我注意到如果没有这一步 OpenCL 程序将无法运行!
之所以工作起来如此复杂,是因为我有一台 nvidia optimus 笔记本电脑,它在 linux 上的驱动程序支持很差。为了解决这个问题,我有 bumblebee安装允许在我的 nvidia 卡和英特尔卡之间切换。
但是,因为我使用的是 bumblebee - nvidia 显卡(和 nvidia 驱动程序)将被卸载,除非明确告知。为了使用 OpenCL,我们需要打开 nvidia 显卡。
为此,我们需要使用命令 optirun
或 primusrun
明确告诉 bumblebee 打开 nvidia 卡:
optirun myopenclprogram
但是请注意,因为重要的是 nvidia 卡已打开并且驱动程序已加载,您不需要继续使用 optirun myprogram
来获取此信息工作(因为这总是涉及等待图形卡初始化的初始延迟)。
例如,您可以运行 optirun kate
,这将打开 nvidia 显卡。然后,您可以在 单独的终端 中运行没有 optirun 的 opencl 程序,它会工作得很好,因为图形卡已经打开(并且只要您离开,它将保持打开状态,例如 kate 运行).
您会注意到这次启动您的程序没有延迟!这为您节省了很多等待时间 - 特别是如果您正在开发有问题的 opencl 程序。
再次声明,只要您保持 nvidia 显卡开启,您的 opencl 程序就会运行。
我可能会联系 bumblebee 开发人员,看看是否有更简单的方法让它工作并在这里报告他们所说的内容。希望有一些方法可以打开和关闭 nvidia 卡,而无需保持程序(如我的示例中的 kate)运行。
我希望这对以后尝试在带有大黄蜂的 Linux 笔记本电脑上使用 OpenCL 的任何人有所帮助(我自己找不到任何明确的解决方案)
EDIT2:对于大黄蜂用户,可以按如下方式打开和关闭显卡:
开启显卡并加载nvidia模块
sudo tee /proc/acpi/bbswitch <<< ON
sudo modprobe nvidia
关闭显卡(nvidia模块自动卸载)
sudo tee /proc/acpi/bbswitch <<< OFF
关于linux - 错误 : clGetPlatformIDs -1001 when running OpenCL code (Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20335579/
我正在使用 NVIDIA 硬件在 Ubuntu 12.04 上测试我的代码。 没有实际的 OpenCL 处理发生;但我的初始化代码仍在运行。此代码调用 clGetPlatformIDs。但是,Valg
我一直在努力学习 OpenCl,但每次我输入这个命令时,我的代码都会出错,这是一个简单的代码,我已经隔离了错误:clGetPlatformIDs 引起以下错误: OpenCl-OpenGl.exe 中
我正在尝试学习一些 OpenCL 以在我的 OpenGL 项目中使用以帮助加快一切,但我目前无法启动 OpenCL。当我从 Visual Studio 2015 启动程序时,代码在 clGetPlat
要创建 opencl 应用程序,第一步是通过使用获取平台 clGetPlatformIDs 我对从函数返回的平台有问题;函数返回我有 2 个平台,但当我检查它们时,我发现我有一个平台,但它是重复的!!
我使用安装此包时附带的示例中的 HelloWorld 示例 AMD PACKAGE 问题是由于错误我无法运行任何示例。 cl_uint numPlatforms; //the NO. of
我是 OpenCL 的新手。在配备 Intel(R) HD Graphics 4000、运行 Windows 7 的 Core i5 机器上工作。我安装了支持 OpenCL 的最新 Intel 驱动程
我有一个用于测试 OpenCL 的简单源代码(2 个向量之和),问题如下:当我运行可执行文件时出现此错误: Error: clGetPlatformIDs(-1001) 此外,如果我运行命令 clin
编辑:错误代码如下 CL_INVALID_PROPERTY if context property name in properties is not a supported property nam
这对我来说很奇怪。我目前正在从我最近迁移到 VS2015 的旧仓库中提取一个项目。解决方案仍然构建并且可执行文件有效,但是在 visual studio 中运行时,我在尝试从 0x000008E0 读
我正在尝试编写一个将在 PostgreSQL 中执行的 OpenCL 函数。为此,我从我的 OpenCL 代码创建 DLL,并使用用户定义函数机制将其链接到 postgres。一切顺利,直到调用 cl
我已经安装了英特尔 OpenCL SDK。我能够找到 header 并链接库,但这些功能都不起作用。在 OpenCL 程序中调用的第一个函数 clGetPlatformIDs() 返回 -1001 -
在 Ubuntu 中对一组 Python 程序进行 nosetests 时发生错误: devices = [ d for d in cl.get_platforms()[0].get_devices(
在最终设法让我的代码用 OpenCL 编译之后,我似乎无法让输出二进制文件运行!这是在我运行 Kubuntu 13.10 x64 的 Linux 笔记本电脑上 我得到的错误是(打印自 cl::Erro
代码: // g++ -std=c++17 -O0 -g -Wall -Wextra -lOpenCL query.cpp -o query // valgrind --leak-check=full
最近我一直在我的 Ubuntu 12.04 机器上使用 OpenCL。当我调用 cl::Platform::get 时,我收到错误代码 -1001。经过一些研究,我发现当 c 调用 getPlatfo
我是一名优秀的程序员,十分优秀!