cudaMalloc() 上的 Cuda 未知错误 (ErrNo: 30)
Cuda Unknown Error(ErrNo: 30) on cudaMalloc()
我已经搜索过原因,但没有成功。它在这样一个简单的程序上失败了:
#include <iostream>
using namespace std;
int main() {
int* n;
cout << cudaMallocManaged(&n, 4 * sizeof(int)) << endl;
return 0;
}
return 代码为 30,未知错误。 cudaMalloc
也因相同的代码而失败。
这是我的硬件:
$ lspci | grep NV
01:00.0 3D controller: NVIDIA Corporation GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (rev a1)
$ nvidia-smi
Sat Mar 7 14:02:04 2015
+------------------------------------------------------+
| NVIDIA-SMI 331.113 Driver Version: 331.113 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 NVS 5200M Off | 0000:01:00.0 N/A | N/A |
| N/A 53C N/A N/A / N/A | 279MiB / 1023MiB | N/A Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Compute processes: GPU Memory |
| GPU PID Process name Usage |
|=============================================================================|
| 0 Not Supported |
+-----------------------------------------------------------------------------+
我正在使用 Ubuntu 14.10,来自官方存储库的 CUDA 6.0(希望 Ubuntu 不会搞砸)。
这是一台Lenovo T430s labtop,显卡在Optimus 上所以可能会引起一些问题。我在另一台机器上测试过,同样的代码可以工作。
更新 1
好的,nvidia_uvm
未加载...
$ lsmod |grep nv
nvidia 10744914 65
nvram 14362 1 thinkpad_acpi
drm 310919 6 i915,drm_kms_helper,nvidia
$ sudo modprobe nvidia_uvm
modprobe: ERROR: ../libkmod/libkmod-module.c:816 kmod_module_insert_module() could not find module by name='nvidia_331_updates_uvm'
modprobe: ERROR: could not insert 'nvidia_331_updates_uvm': Function not implemented
更新 2
好的,我重新安装了 nvidia-331-updates-uvm 并加载了模块。
$ lsmod | grep nv
nvidia_uvm 34855 0
nvidia 10744914 66 nvidia_uvm
nvram 14362 1 thinkpad_acpi
drm 310919 6 i915,drm_kms_helper,nvidia
但是,代码仍然 return 错误 30。
更新 3
经过更多测试(主要是 运行 作为 root 尝试),现在我得到错误 71:不支持操作。但是,如果我只是使用 cudaMalloc
它就成功了。我也会检查我的设备是否支持统一内存寻址。
更新 4
好的,我的卡只支持SM 2.1,所以不支持Unified Memory
AFAIK nvidia_uvm
CUDA 工作需要内核模块。
您需要安装包含该内核模块的软件包,例如nvidia-331-uvm
和
通过安装 nvidia-modprobe
包启用它的自动加载:
sudo apt-get install nvidia-modprobe nvidia-331-uvm
如果你不想在安装 nvidia-modprobe
后重新启动,你可以尝试 运行 你的程序作为 root(例如 sudo ./a.out
)——模块应该在 运行 作为根。
我已经搜索过原因,但没有成功。它在这样一个简单的程序上失败了:
#include <iostream>
using namespace std;
int main() {
int* n;
cout << cudaMallocManaged(&n, 4 * sizeof(int)) << endl;
return 0;
}
return 代码为 30,未知错误。 cudaMalloc
也因相同的代码而失败。
这是我的硬件:
$ lspci | grep NV
01:00.0 3D controller: NVIDIA Corporation GF117M [GeForce 610M/710M/820M / GT 620M/625M/630M/720M] (rev a1)
$ nvidia-smi
Sat Mar 7 14:02:04 2015
+------------------------------------------------------+
| NVIDIA-SMI 331.113 Driver Version: 331.113 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 NVS 5200M Off | 0000:01:00.0 N/A | N/A |
| N/A 53C N/A N/A / N/A | 279MiB / 1023MiB | N/A Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Compute processes: GPU Memory |
| GPU PID Process name Usage |
|=============================================================================|
| 0 Not Supported |
+-----------------------------------------------------------------------------+
我正在使用 Ubuntu 14.10,来自官方存储库的 CUDA 6.0(希望 Ubuntu 不会搞砸)。
这是一台Lenovo T430s labtop,显卡在Optimus 上所以可能会引起一些问题。我在另一台机器上测试过,同样的代码可以工作。
更新 1
好的,nvidia_uvm
未加载...
$ lsmod |grep nv
nvidia 10744914 65
nvram 14362 1 thinkpad_acpi
drm 310919 6 i915,drm_kms_helper,nvidia
$ sudo modprobe nvidia_uvm
modprobe: ERROR: ../libkmod/libkmod-module.c:816 kmod_module_insert_module() could not find module by name='nvidia_331_updates_uvm'
modprobe: ERROR: could not insert 'nvidia_331_updates_uvm': Function not implemented
更新 2
好的,我重新安装了 nvidia-331-updates-uvm 并加载了模块。
$ lsmod | grep nv
nvidia_uvm 34855 0
nvidia 10744914 66 nvidia_uvm
nvram 14362 1 thinkpad_acpi
drm 310919 6 i915,drm_kms_helper,nvidia
但是,代码仍然 return 错误 30。
更新 3
经过更多测试(主要是 运行 作为 root 尝试),现在我得到错误 71:不支持操作。但是,如果我只是使用 cudaMalloc
它就成功了。我也会检查我的设备是否支持统一内存寻址。
更新 4
好的,我的卡只支持SM 2.1,所以不支持Unified Memory
AFAIK nvidia_uvm
CUDA 工作需要内核模块。
您需要安装包含该内核模块的软件包,例如nvidia-331-uvm
和
通过安装 nvidia-modprobe
包启用它的自动加载:
sudo apt-get install nvidia-modprobe nvidia-331-uvm
如果你不想在安装 nvidia-modprobe
后重新启动,你可以尝试 运行 你的程序作为 root(例如 sudo ./a.out
)——模块应该在 运行 作为根。