Este software prueba la memoria GPU para errores de hardware y errores suaves utilizando CUDA (u OpenCL).
Esta es una bifurcación del proyecto original pero desde hace mucho tiempo sin mermos en https://sourceforge.net/projects/cudagpumemtest/.
Después de nuestra bifurcación en 2013 (V1.2.3), nos centramos principalmente en el soporte para versiones más nuevas de CUDA y el soporte de hardware NVIDIA más nuevo. Sin embargo, las requisitos de extracción de la verificación que mantienen las versiones de OpenCl son bienvenidos.
Licencia de código abierto de Illinois
Universidad de Illinois/NCSA
Licencia de código abierto
Copyright 2009-2012, Universidad de Illinois. Reservados todos los derechos.
Copyright 2013-2019, los desarrolladores de Picongpu en Helmholtz-Zentrum Dresden-Rossendorf
Desarrollado por:
Laboratorio de sistemas innovadores
Centro Nacional para Aplicaciones de Supercomputación
http://www.ncsa.uiuc.edu/aboutus/directorates/isl.html
Bifurcado y mantenido para las nuevas GPU de NVIDIA desde 2013 por:
Axel Huebl y Rene Widera
Grupo de física de radiación computacional
Helmholtz-Zentrum Dresde-Rossendorf
https://www.hzdr.de/crp
El permiso se otorga, de forma gratuita, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "software"), para tratar el software sin restricción, incluidos los derechos de usar, copiar, modificar, modificar, modificar, fusionar , publique, distribuya, sublicence y venda copias del software, y para permitir a las personas a las que se proporciona el software para hacerlo, sujeto a las siguientes condiciones:
Las redistribuciones del código fuente deben retener el aviso de derechos de autor anterior, esta lista de condiciones y las siguientes renuncias.
Las redistribuciones en forma binaria deben reproducir el aviso de derechos de autor anterior, esta lista de condiciones y las siguientes renuncias en la documentación y/u otros materiales provistos con la distribución.
Ni los nombres del Innovative Systems Lab, el Centro Nacional para las Aplicaciones de Supercomputación, ni los nombres de sus contribuyentes pueden usarse para respaldar o promover productos derivados de este software sin un permiso previo específico por escrito.
El software se proporciona "tal cual", sin garantía de ningún tipo, expresa o implícita, incluidas, entre otros, las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. En ningún caso los contribuyentes o titulares de derechos de autor serán responsables de cualquier reclamo, daños u otro responsabilidad, ya sea en una acción de contrato, agravio o de otro tipo, derivado, de o en relación con el software o el uso u otros tratos con el SOFTWARE.
Dentro del directorio de origen, ejecute:
mkdir build
cd build
# build for NVIDIA architecture sm_35
cmake -DCMAKE_CUDA_ARCHITECTURES=35 ..
make
Dentro del directorio de origen, ejecute:
mkdir build
cd build
# build for NVIDIA architecture MI2XX
cmake -DCUDA_MEMTEST_BACKEND=hip -DGPU_TARGETS=gfx90a ..
make
Nota:
..
es la ruta al directorio de origen. También proporcionamos el paquete cuda-memtest
en el Spack Package Manager.
cuda_memtest
El comportamiento predeterminado es ejecutar la prueba en todas las GPU disponibles infinitamente. Hay opciones para cambiar el comportamiento predeterminado.
cuda_memtest --disable_all --enable_test 10
cuda_memtest --stress
Esto ejecuta la prueba 10 (la prueba de estrés). --stress
es equivalente a --disable_all --enable_test 10 --exit_on_error
cuda_memtest --stress --num_iterations 100 --num_passes 1
Este hace una verificación de cordura rápida para las GPU con una breve ejecución de la prueba 10. Más sobre esto más adelante.
Ver mensaje de ayuda por
cuda_memtest --help
Hay un script simple sanity_check.sh
en el directorio. Este script realiza una verificación rápida si una GPU o todas las GPU tienen mala salud.
Ejemplo de uso:
# copy the cuda_memtest binary first into the same location as this script, e.g.
cd ..
mv build/cuda_memtest .
./sanity_check.sh 0 //check GPU 0
./sanity_check.sh 1 //check GPU 1
./sanity_check.sh //check All GPUs in the system
Nota de la bifurcación: Acabamos de ejecutar el binario cuda_memtest
directamente. Considere este guión como una fuente de inspiración, más o menos.
Incluso si compila con AMD HIP, el binario de la herramienta se llamará cuda_memtest
.
Si se ejecuta en GPU de AMD a través de la cadera, la herramienta mencionará en todas partes CUDA en lugar de cadera.
No estamos manteniendo la versión OpenCL de esta base de código. Las solicitudes de extracción de restauración y actualización de las capacidades de OpenCL son bienvenidas.
Correr
cuda_memtest --list_tests
Imprimirá todas las pruebas y sus descripciones breves, a partir del 18/08/2009, implementamos 11 pruebas
Test0 [Walking 1 bit]
Test1 [Own address test]
Test2 [Moving inversions, ones&zeros]
Test3 [Moving inversions, 8 bit pat]
Test4 [Moving inversions, random pattern]
Test5 [Block move, 64 moves]
Test6 [Moving inversions, 32 bit pat]
Test7 [Random number sequence]
Test8 [Modulo 20, random pattern]
Test9 [Bit fade test] ==disabled by default==
Test10 [Memory stress test]
Primero se lanza un núcleo para escribir un patrón. Luego salimos del núcleo para que la memoria pueda ser enjuagada. Luego comenzamos un nuevo núcleo para leer y verificar si el valor coincide con el patrón. Se registra un error si no coincide para cada ubicación de memoria. En el mismo núcleo, el complemento del patrón se escribe después de la verificación. El tercer núcleo se lanza para leer el valor nuevamente y verificaciones contra el complemento del patrón.
Prueba 0 [Walking 1 bit]
Esta prueba cambia un bit por tiempo en la dirección de memoria para ver que va a una ubicación de memoria diferente. Está diseñado para probar los cables de la dirección.
Prueba 1 [Own address test]
Cada ubicación de memoria está llena de su propia dirección. El siguiente núcleo verifica si el valor en cada ubicación de memoria todavía está de acuerdo con la dirección.
Prueba 2 [Moving inversions, ones&zeros]
Esta prueba utiliza el algoritmo de inversiones móviles con patrones de todos y ceros.
Prueba 3 [Moving inversions, 8 bit pat]
Esto es lo mismo que la Prueba 1, pero usa un patrón de 8 bits de "caminar" y ceros. Esta prueba detectará mejor errores sutiles en chips de memoria "anchos".
Prueba 4 [Moving inversions, random pattern]
La prueba 4 usa el mismo algoritmo que la prueba 1, pero el patrón de datos es un número aleatorio y su complemento. Esta prueba es particularmente efectiva para encontrar errores sensibles a los datos difíciles de detectar. La secuencia de números aleatorios es diferente con cada pase, por lo que múltiples pases aumentan la efectividad.
Prueba 5 [Block move, 64 moves]
Esta prueba enfatiza la memoria moviendo recuerdos de bloque. La memoria se inicializa con patrones de cambio que se invierten cada 8 bytes. Luego se mueven bloques de memoria. Después de completar los movimientos, se verifican los patrones de datos. Debido a que los datos se verifican solo después de que se completen los movimientos de memoria, no es posible saber dónde ocurrió el error. Las direcciones informadas son solo para donde se encontró el mal patrón.
Prueba 6 [Moving inversions, 32 bit pat]
Esta es una variación del algoritmo de inversiones móviles que cambia el patrón de datos que le queda un bit para cada dirección sucesiva. La posición de bit de inicio se desplaza a la izquierda para cada pase. Para usar todos los posibles patrones de datos se requieren 32 pases. Esta prueba es bastante efectiva para detectar errores sensibles a los datos, pero el tiempo de ejecución es largo.
Prueba 7 [Random number sequence]
Esta prueba escribe una serie de números aleatorios en la memoria. Un bloque (1 MB) de memoria se inicializa con patrones aleatorios. Estos patrones y sus complementos se utilizan en la prueba de inversiones en movimiento con el resto de la memoria.
Prueba 8 [Modulo 20, random pattern]
Se genera un patrón aleatorio. Este patrón se utiliza para establecer cada ubicación de memoria 20 en la memoria. El resto de la ubicación de memoria se establece en el complemento del patrón. Repita esto por 20 veces y cada vez que la ubicación de memoria para establecer el patrón se desplaza a la derecha.
Prueba 9 [Bit fade test, 90 min, 2 patterns]
La prueba de desvanecimiento de bits inicializa toda la memoria con un patrón y luego duerme durante 90 minutos. Entonces se examina la memoria para ver si hay algún bits de memoria. Se utilizan todos los y todos los patrones cero. Esta prueba tarda 3 horas en completarse. La prueba de desvanecimiento de bits está deshabilitada de forma predeterminada
Prueba 10 [memory stress test]
La memoria del estrés tanto como podamos. Se genera un patrón aleatorio y se inicia un núcleo de gran tamaño de cuadrícula y tamaño de bloque para establecer toda la memoria en el patrón. Se lanza un nuevo núcleo de lectura y escritura inmediatamente después del núcleo de escritura anterior para verificar si hay algún error en la memoria y establecer la memoria en el complemento. Este proceso se repite por 1000 veces para un patrón. El núcleo está escrito para lograr el máximo ancho de banda entre la memoria global y la GPU. Esto aumentará las posibilidades de captar el error de software. En la práctica, encontramos esta prueba bastante útil para enjuagar los errores de hardware también.