Dieser Software testet den GPU -Speicher auf Hardwarefehler und Soft -Fehler mit CUDA (oder OpenCL).
Dies ist eine Gabel des ursprünglichen, aber langjährigen, nicht berücksichtigten Projekts unter https://sourceforge.net/projects/cudagpumemtest/.
Nach unserer Gabel im Jahr 2013 (V1.2.3) haben wir uns hauptsächlich auf die Unterstützung neuerer CUDA -Versionen und die Unterstützung neuerer NVIDIA -Hardware konzentriert. Pull-Requests, die die OpenCL-Versionen beibehalten, sind dennoch immer noch willkommen.
Illinois Open Source -Lizenz
Universität von Illinois/NCSA
Open Source -Lizenz
Copyright 2009-2012, Universität von Illinois. Alle Rechte vorbehalten.
Copyright 2013-2019, die Entwickler von Picongpu bei Helmholtz-Zentrum Dresden-Rossendorf
Entwickelt von:
Innovatives Systemlabor
Nationales Zentrum für Supercomputing -Anwendungen
http://www.ncsa.uiuc.edu/aboutus/directorates/isl.html
Forked und gewartet für den neueren Nvidia -GPUs seit 2013 von:
Axel Huebl und Rene bridera
Rechenstrahlungsphysikgruppe
Helmholtz-Zentrum Dresden-Rossendorf
https://www.hzdr.de/crp
Die Erlaubnis wird hiermit kostenlos an eine Person erteilt, die eine Kopie dieser Software und zugehörigen Dokumentationsdateien ("Software") erhält, um die Software ohne Einschränkung zu behandeln, einschließlich ohne Einschränkung der Verwendung, kopieren, modifizieren, verschmelzen, verschmelzen , veröffentlichen, vertreiben, unterlizenzieren und/oder Kopien der Software verkaufen und Personen, denen die Software dazu bereitgestellt wird, unter den folgenden Bedingungen ermöglicht:
Umverteilungen des Quellcode müssen die oben genannte Copyright -Mitteilung, diese Liste der Bedingungen und die folgenden Haftungsausschlüsse beibehalten.
Umverteilungen in binärer Form müssen die oben genannte Copyright -Mitteilung, diese Liste der Bedingungen und die folgenden Haftungsausschlüsse in der Dokumentation und/oder anderen mit der Verteilung bereitgestellten Materialien reproduzieren.
Weder die Namen des innovativen Systemlabors, des Nationalen Zentrums für Supercomputing -Anwendungen noch die Namen seiner Mitwirkenden können verwendet werden, um Produkte zu unterstützen oder zu fördern, die aus dieser Software ohne spezifische schriftliche Genehmigung abgeleitet wurden.
Die Software wird "wie es ist" ohne Garantie jeglicher Art, ausdrücklich oder stillschweigend bereitgestellt, einschließlich, aber nicht beschränkt auf die Gewährleistung der Handelsfähigkeit, die Eignung für einen bestimmten Zweck und die Nichtverletzung. In keinem Fall haftet die Mitwirkenden oder Urheberrechtsinhaber für Ansprüche, Schäden oder andere Haftungen, sei es in Vertragsmaßnahmen, unerlaubter Handlung oder anderweitig, aus oder im Zusammenhang mit der Software oder anderen Geschäften mit dem SOFTWARE.
Rennen Sie im Quellverzeichnis:
mkdir build
cd build
# build for NVIDIA architecture sm_35
cmake -DCMAKE_CUDA_ARCHITECTURES=35 ..
make
Rennen Sie im Quellverzeichnis:
mkdir build
cd build
# build for NVIDIA architecture MI2XX
cmake -DCUDA_MEMTEST_BACKEND=hip -DGPU_TARGETS=gfx90a ..
make
Notiz:
..
der Weg zum Quellverzeichnis. Wir stellen auch das Paket cuda-memtest
im Spack-Paket-Manager bereit.
cuda_memtest
Das Standardverhalten besteht darin, den Test auf allen verfügbaren GPUs zu ausgeführt, die unendlich verfügbar sind. Es gibt Optionen, um das Standardverhalten zu ändern.
cuda_memtest --disable_all --enable_test 10
cuda_memtest --stress
Dadurch wird Test 10 (der Spannungstest) ausgeführt. --stress
entspricht- --disable_all --enable_test 10 --exit_on_error
cuda_memtest --stress --num_iterations 100 --num_passes 1
Dieser führt eine schnelle Überprüfung von GPUs mit einem kurzen Test 10 durch.
Siehe Hilfenachricht von
cuda_memtest --help
Es gibt ein einfaches Skript sanity_check.sh
im Verzeichnis. Dieses Skript führt eine kurze Überprüfung durch, ob eine GPU oder alle GPUs in schlechter Gesundheit sind.
Beispiel Verwendung:
# 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
Gabel Hinweis: Wir führen einfach den cuda_memtest
-BINARY direkt aus. Betrachten Sie dieses Skript als Quelle für Inspiration oder so.
Auch wenn Sie mit AMD Hip kompilieren, heißt das Werkzeug Binary cuda_memtest
.
Wenn Sie über Hip mit AMD GPUs laufen, erwähnt das Tool überall Cuda anstelle von Hip.
Wir pflegen die OpenCL -Version dieser Codebasis nicht . Anfragen, die die OpenCL -Funktionen wiederherstellen und aktualisieren, sind willkommen.
Läuft
cuda_memtest --list_tests
Drucken Sie alle Tests und ihre kurzen Beschreibungen ab 18.06.2009 implementiert 11 Tests
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]
Zuerst wird ein Kernel gestartet, um ein Muster zu schreiben. Dann verlassen wir den Kernel, damit die Erinnerung gespült werden kann. Dann starten wir einen neuen Kernel, um zu lesen und zu überprüfen, ob der Wert dem Muster übereinstimmt. Ein Fehler wird aufgezeichnet, wenn er nicht für jeden Speicherort übereinstimmt. Im selben Kernel wird die Komplement des Musters nach der Überprüfung geschrieben. Der dritte Kernel wird ins Leben gerufen, um den Wert erneut zu lesen und über die Komplement des Musters zu prüfen.
Test 0 [Walking 1 bit]
Dieser Test ändert eine Zeit in der Speicheradresse, um zu sehen, dass er an einen anderen Speicherort geht. Es wurde entwickelt, um die Adressdrähte zu testen.
Test 1 [Own address test]
Jeder Speicherort ist mit einer eigenen Adresse gefüllt. Der nächste Kernel prüft, ob der Wert in jedem Speicherort mit der Adresse immer noch übereinstimmt.
Test 2 [Moving inversions, ones&zeros]
Dieser Test verwendet den Moving Inversion -Algorithmus mit Mustern aller und Nullen.
Test 3 [Moving inversions, 8 bit pat]
Dies ist das gleiche wie bei Test 1, verwendet jedoch ein 8 -Bit -Muster von "Gehen" und Nullen. Dieser Test erfasst subtile Fehler in "breiten" Speicherchips besser.
Test 4 [Moving inversions, random pattern]
Test 4 verwendet denselben Algorithmus wie Test 1, aber das Datenmuster ist eine Zufallszahl und es ist Komplement. Dieser Test ist besonders effektiv, um datenempfindliche Fehler zu erkennen. Die Zufallszahlensequenz unterscheidet sich bei jedem Pass, sodass mehrere Pässe die Wirksamkeit erhöhen.
Test 5 [Block move, 64 moves]
Dieser Test belastet das Gedächtnis durch Verschieben von Blockerinnerungen. Das Gedächtnis wird mit Verschiebungsmustern initialisiert, die alle 8 Bytes invertiert werden. Dann werden Speicherblöcke bewegt. Nach Abschluss der Bewegungen werden die Datenmuster überprüft. Da die Daten erst nach Abschluss der Speicherbewegungen überprüft werden, ist es nicht möglich zu wissen, wo der Fehler aufgetreten ist. Die angegebenen Adressen gelten nur, wo das schlechte Muster gefunden wurde.
Test 6 [Moving inversions, 32 bit pat]
Dies ist eine Variation des sich bewegenden Inversionalgorithmus, der das Datenmuster für jede aufeinanderfolgende Adresse verschiebt. Die Startbitposition wird für jeden Pass nach links verschoben. Um alle möglichen Datenmuster zu verwenden, sind 32 Pässe erforderlich. Dieser Test ist sehr effektiv, um datenempfindliche Fehler zu erkennen, aber die Ausführungszeit ist lang.
Test 7 [Random number sequence]
Dieser Test schreibt eine Reihe von Zufallszahlen in den Speicher. Ein Block (1 MB) Speicher wird mit Zufallsmustern initialisiert. Diese Muster und ihre Ergänzungen werden zum Bewegen von Inversionstests mit dem Rest des Speichers verwendet.
Test 8 [Modulo 20, random pattern]
Es wird ein zufälliges Muster erzeugt. Dieses Muster wird verwendet, um jeden 20. Speicherort im Speicher festzulegen. Der Rest des Speicherorts ist auf die Ergänzung des Musters eingestellt. Wiederholen Sie dies 20 Mal und jedes Mal, wenn der Speicherort zum Einstellen des Musters nach rechts verschoben wird.
Test 9 [Bit fade test, 90 min, 2 patterns]
Der Bit -Fade -Test initialisiert das gesamte Speicher mit einem Muster und schläft dann 90 Minuten. Dann wird der Speicher untersucht, um festzustellen, ob Speicherbits geändert wurden. Alle und alle Nullmuster werden verwendet. Dieser Test dauert 3 Stunden. Der Bit -Fade -Test ist standardmäßig deaktiviert
Test 10 [memory stress test]
Stressgedächtnis so viel wir können. Es wird ein zufälliges Muster erzeugt und ein Kern mit großer Gittergröße und Blockgröße wird gestartet, um den gesamten Speicher auf das Muster einzustellen. Ein neuer Lese- und Schreibkernel wird unmittelbar nach dem vorherigen Write -Kernel gestartet, um zu überprüfen, ob Fehler im Speicher vorhanden sind, und den Speicher auf das Komplement einstellen. Dieser Vorgang wird 1000 -mal für ein Muster wiederholt. Der Kernel ist geschrieben, um die maximale Bandbreite zwischen dem globalen Gedächtnis und der GPU zu erreichen. Dies erhöht die Wahrscheinlichkeit, Softwarefehler zu fangen. In der Praxis fanden wir diesen Test sehr nützlich, um Hardwarefehler zu spülen.