linux instalar - ¿Cómo obtener la versión del controlador nvidia desde la línea de comandos?




video tengo (6)

Para depurar el código CUDA y verificar las compatibilidades necesito averiguar qué versión del controlador nvidia para la GPU que he instalado. Encontré Cómo obtener la versión cuda? pero eso no me ayuda aquí.


Answers

Versión de Windows:

cd \ Archivos de programa \ NVIDIA Corporation \ NVSMI

nvidia-smi


Si necesita obtenerlo en un programa con Python en un sistema Linux para la reproducibilidad:

with open('/proc/driver/nvidia/version') as f:
    version = f.read().strip()
print(version)

da:

NVRM version: NVIDIA UNIX x86_64 Kernel Module  384.90  Tue Sep 19 19:17:35 PDT 2017
GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5) 

[NOTA: no borro mi respuesta a propósito, para que la gente vea cómo no hacerlo]

Si utiliza:

[email protected]_there:~$  dpkg --status nvidia-current | grep Version | cut -f 1 -d '-' | sed 's/[^.,0-9]//g'
260.19.06

obtendrá la versión del paquete de controlador nVIDIA instalada a través del mecanismo de empaquetado de su distribución. Pero esta puede no ser la versión que se está ejecutando actualmente como parte de su kernel.


modinfo hace el truco.

[email protected]:/usr/src# modinfo nvidia|grep version:
version:        331.113

Usar nvidia-smi debería decirle que:

[email protected]:~$ nvidia-smi 
Mon Oct 29 12:30:02 2012       
+------------------------------------------------------+                       
| NVIDIA-SMI 3.295.41   Driver Version: 295.41         |                       
|-------------------------------+----------------------+----------------------+
| Nb.  Name                     | Bus Id        Disp.  | Volatile ECC SB / DB |
| Fan   Temp   Power Usage /Cap | Memory Usage         | GPU Util. Compute M. |
|===============================+======================+======================|
| 0.  GeForce GTX 580           | 0000:25:00.0  N/A    |       N/A        N/A |
|  54%   70 C  N/A   N/A /  N/A |  25%  383MB / 1535MB |  N/A      Default    |
|-------------------------------+----------------------+----------------------|
| Compute processes:                                               GPU Memory |
|  GPU  PID     Process name                                       Usage      |
|=============================================================================|
|  0.           Not Supported                                                 |
+-----------------------------------------------------------------------------+

La memoria compartida CUDA es memoria compartida entre los hilos dentro de un bloque, es decir, entre bloques en una cuadrícula, los contenidos de la memoria compartida no están definidos. Se puede pensar como un caché L2 administrado manualmente.

Por lo general, la memoria global reside en el dispositivo, pero las versiones recientes de CUDA (si el dispositivo lo admite) pueden mapear la memoria del host en el espacio de direcciones del dispositivo, desencadenando una transferencia de DMA in situ desde el host a la memoria del dispositivo en tales ocasiones.

Hay un límite de tamaño en la memoria compartida, según el dispositivo. Se informa en las capacidades del dispositivo, recuperadas al enumerar los dispositivos CUDA. La memoria global está limitada por la memoria total disponible para la GPU. Por ejemplo, una GTX680 ofrece 48 kB de memoria compartida y memoria de dispositivo 2 G iB.

La memoria compartida es más rápida de acceder que la memoria global, pero los patrones de acceso deben alinearse cuidadosamente (tanto para memoria compartida como global) para ser eficiente. Si no puede hacer que sus patrones de acceso estén alineados correctamente, use texturas (también memoria global, pero a la que se accede a través de un caché y un entorno diferente, que puede manejar mejor el acceso desalineado).

¿Es lo mismo almacenar una variable en la memoria compartida que pasar su dirección a través del kernel?

No, definitivamente no. El código que ha propuesto sería un caso en el que utilizaría la memoria global transferida in situ. La memoria compartida no se puede pasar entre los núcleos, ya que los contenidos de un bloque compartido se definen dentro de un bloque de ejecución de hilos solamente.





linux cuda driver