【问题标题】:Cuda Unknown Error(ErrNo: 30) on cudaMalloc()cudaMalloc() 上的 Cuda 未知错误(ErrNo: 30)
【发布时间】:2015-03-07 19:04:55
【问题描述】:

我已经搜索了原因,但没有运气。在这样一个简单的程序上失败了:

#include <iostream>

using namespace std;

int main() {
  int* n;
  cout << cudaMallocManaged(&n, 4 * sizeof(int)) << endl;
  return 0;
}

返回码为 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 没有搞砸)。

这是一台联想 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

但是,代码仍然返回错误 30。

更新 3

经过更多测试(主要是尝试以 root 身份运行),现在我收到错误 71:不支持操作。但是,如果我只是使用cudaMalloc,它就成功了。我还会检查我的设备是否支持统一内存寻址。

更新 4

好的,我的卡只支持SM 2.1,所以不支持Unified Memory。

【问题讨论】:

  • 您是否使用optirun 运行您的程序,例如optirun ./a.out?
  • 不,我不是使用 bumblebee,而是使用 NVidia 卡的 nvidia-prime。
  • 是否加载了nvidia_uvm 内核模块? lsmod | grep nv 输出中有什么内容?
  • 嗯,不...但我加载失败。

标签: cuda malloc


【解决方案1】:

AFAIK nvidia_uvm 内核模块是 CUDA 工作所必需的。

您需要使用该内核模块安装软件包,例如nvidia-331-uvm 和 通过安装nvidia-modprobe 包启用它的自动加载:

sudo apt-get install nvidia-modprobe nvidia-331-uvm

如果您在安装 nvidia-modprobe 后不想重新启动,您可以尝试以 root 身份运行您的程序(例如 sudo ./a.out) - 模块应该在以 root 身份运行期间加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-24
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    相关资源
    最近更新 更多