example cudamemcpy cudamalloc cuda malloc

cudamemcpy - cudamalloc example



Error desconocido de Cuda(ErrNo: 30) en cudaMalloc() (1)

He buscado el motivo pero no tuve suerte. No funciona en un programa tan simple:

#include <iostream> using namespace std; int main() { int* n; cout << cudaMallocManaged(&n, 4 * sizeof(int)) << endl; return 0; }

El código de retorno es 30, error desconocido. cudaMalloc también falla con el mismo código.

Este es mi hardware:

$ 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 | +-----------------------------------------------------------------------------+

Estoy usando Ubuntu 14.10, con CUDA 6.0 del repositorio oficial (con suerte, si Ubuntu no lo estropea).

Es un labtop Lenovo T430s, la tarjeta está en Optimus por lo que podría causar algún problema. He probado en otra máquina y funciona el mismo código.

Actualización 1

OK, nvidia_uvm no está cargado ...

$ 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

Actualización 2

OK, reinstalé nvidia-331-updates-uvm y el módulo se cargó.

$ 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

Sin embargo, el código aún devuelve el error 30.

Actualización 3

Después de algunas pruebas más (principalmente intenté ejecutar como root), ahora recibo el error 71: operación no admitida. Sin embargo, si solo estoy usando cudaMalloc , tuvo éxito. También verificaré si mi dispositivo es compatible con el direccionamiento de memoria unificada.

Actualización 4

De acuerdo, mi tarjeta solo es compatible con SM 2.1, por lo que no es compatible con la memoria unificada.


Se requiere el módulo de núcleo de nvidia_uvm AFAIK para que funcione CUDA.

Necesitará instalar el paquete con ese módulo kernel, por ejemplo, nvidia-331-uvm y habilitar su carga automática instalando el paquete nvidia-modprobe :

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

Si no desea reiniciar después de instalar nvidia-modprobe , puede intentar ejecutar su programa como root (por ejemplo, sudo ./a.out ) - el módulo debe cargarse durante la ejecución como root.