簡體   English   中英

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;
}

返回碼是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                                               |
+-----------------------------------------------------------------------------+

我正在使用來自官方存儲庫的CUDA 6.0的Ubuntu 14.10(希望,如果Ubuntu不會弄亂它)。

這是一個聯想T430s台式機,該卡在Optimus上,可能會引起一些問題。 我已經在另一台機器上進行了測試,並且相同的代碼有效。

更新1

OK,未加載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,因此不支持統一內存。

CUDA需要AFAIK nvidia_uvm內核模塊才能運行。

您需要使用該內核模塊安裝軟件包,例如nvidia-331-uvm並通過安裝nvidia-modprobe軟件包來啟用它的自動加載:

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

如果在安裝nvidia-modprobe之后不想重啟,則可以嘗試以root身份運行程序(例如sudo ./a.out在以root身份運行期間應加載模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM