c++ - 在 Ubuntu Linux 中使用 Nvidia 卡的 OpenCL 出现 -1001 错误

标签 c++ c linux ubuntu opencl

我正在尝试运行 this OpenCL Example在 Ubuntu 10.04 中。 我的显卡是 NVIDIA GeForce GTX 480。我已经手动安装了最新的 NVIDIA 驱动程序和 CUDA 工具包。

程序编译没有任何错误。因此与 libOpenCL 链接有效。该应用程序也运行但输出非常奇怪(主要是零和一些随机数)。调试显示

clGetPlatformIDs(1, &platform_id, &ret_num_platforms);

返回 -1001。

google 和 stack 告诉我,原因可能是/etc/OpenCL/vendors 中缺少 nvidia.icd。它不在那里,所以我在/etc/OpenCL/vendors/nvidia.icd 中添加了以下行

libnvidia-opencl.so.1

我也尝试过一些变体(绝对路径等)。但没有解决问题。现在我不知道我还能尝试什么。有什么建议吗?

编辑:我已经安装了英特尔 OpenCL SDK,并将其 icd 复制到/etc/OpenCL/vendors 中,应用程序可以正常工作

clGetDeviceIDs( platform_id, CL_DEVICE_TYPE_DEFAULT, 1,
        &device_id, &ret_num_devices);

为了

clGetDeviceIDs( platform_id, CL_DEVICE_TYPE_GPU, 1,
        &device_id, &ret_num_devices);

我收到错误 -1。

编辑:

在执行应用程序时,我在控制台中注意到一件事。行执行后

cl_int ret = clGetPlatformIDs(1, &platform_id, &ret_num_platforms);

应用程序给我输出

modprobe: ERROR: ../libkmod/libkmod-module.c:809 kmod_module_insert_module() could not find module by name='nvidia_331_uvm'
modprobe: ERROR: could not insert 'nvidia_331_uvm': Function not implemented

由于我使用的是 340,因此似乎与较旧的驱动程序版本有冲突。

cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  340.32  Tue Aug  5 20:58:26 PDT 2014

也许我应该尝试再次删除 Ubuntu 自己的 NVIDIA 驱动程序并再次手动重新安装最新版本?

编辑:

问题出在老司机身上。不知何故,它没有被正确删除,因此我又做了一次

apt-get remove nvidia-331 nvidia-opencl-icd-331 nvidia-libopencl1-331

现在可以了。我希望这对遇到类似问题的人有所帮助。

最佳答案

上述问题的发生是由于驱动冲突。如果您有类似的问题,请阅读上述编辑以获得解决方案。

关于c++ - 在 Ubuntu Linux 中使用 Nvidia 卡的 OpenCL 出现 -1001 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25849530/

相关文章:

c++ - 在 Windows 7 上捕获单个应用程序的音频

c++ - 有没有办法检查 istream 是否以二进制模式打开?

c++ - Qt C++信号转Qml

c - 如何处理 argv 字符数组赋值?

linux - strace整个操作系统同时获取所有进程的strace日志

python - 使用用户在 Python 中插入的文件运行 Linux shell 脚本

python - 在python中使用 "using std::vector"时SWIG参数错误

c - 当使用由 MPI_Type_struct() 创建的派生类型时,MPI_reduce 的 'count' 参数应该是什么?

c++ - WinApi,从控件获取文本,不可见文本和可见文本不显示任何内容

c - close() 在 Linux 上调用 fsync() 吗?