このソフトウェアは、CUDA(またはOpenCL)を使用したハードウェアエラーとソフトエラーについてGPUメモリをテストします。
これは、https://sourceforge.net/projects/cudagpumemtest/にあるオリジナルでありながら長年にわたるプロジェクトのフォークです。
2013年のフォーク(v1.2.3)の後、私たちは主に、新しいCUDAバージョンのサポートと新しいNvidiaハードウェアのサポートに焦点を当てました。それにもかかわらず、OpenCLバージョンを維持するPull-Requestsはまだ大歓迎です。
イリノイ州のオープンソースライセンス
イリノイ大学/NCSA
オープンソースライセンス
著作権2009-2012、イリノイ大学。無断転載を禁じます。
Copyright 2013-2019、Helmholtz-Zentrum Dresden-RossendorfのPicongpuの開発者
開発者:
革新的なシステムラボ
国立スーパーコンピューティングアプリケーションセンター
http://www.ncsa.uiuc.edu/aboutus/directorates/isl.html
2013年以降、新しいNvidia GPUのためにフォークされ、維持されています。
Axel HueblとRene Widera
計算放射物理学グループ
Helmholtz-Zentrum Dresden-Rossendorf
https://www.hzdr.de/crp
このソフトウェアと関連するドキュメントファイル(「ソフトウェア」)のコピーを取得している人に、これにより許可が無料で許可されます。 、ソフトウェアのコピーを公開、配布、サブライセンス、および/または販売し、次の条件を条件として、ソフトウェアが提供される人を許可します。
ソースコードの再配布は、上記の著作権通知、この条件リスト、および次の免責事項を保持する必要があります。
バイナリ形式の再配布は、上記の著作権通知、この条件リスト、および分布に提供されたドキュメントおよび/またはその他の資料の次の免責事項を再現する必要があります。
革新的なシステムラボの名前、国立スーパーコンピューティングアプリケーションセンター、その貢献者の名前は、事前の書面による許可なしにこのソフトウェアから派生した製品を支持または宣伝するために使用することもできません。
このソフトウェアは、商品性、特定の目的への適合性、および非侵害の保証を含むがこれらに限定されない、明示的または黙示的なものを保証することなく、「現状のまま」提供されます。いかなる場合でも、契約、不法行為、またはその他の訴訟、ソフトウェアまたは使用またはその他の取引に関連する、またはその他の契約、またはその他の請求、損害、またはその他の責任について、貢献者または著作権保有者が責任を負うことはありません。ソフトウェア。
ソースディレクトリ内で、実行します。
mkdir build
cd build
# build for NVIDIA architecture sm_35
cmake -DCMAKE_CUDA_ARCHITECTURES=35 ..
make
ソースディレクトリ内で、実行します。
mkdir build
cd build
# build for NVIDIA architecture MI2XX
cmake -DCUDA_MEMTEST_BACKEND=hip -DGPU_TARGETS=gfx90a ..
make
注記:
..
ソースディレクトリへのパスです。また、スパックパッケージマネージャーにパッケージcuda-memtest
提供します。
cuda_memtest
デフォルトの動作は、利用可能なすべてのGPUで無限にテストを実行しています。デフォルトの動作を変更するオプションがあります。
cuda_memtest --disable_all --enable_test 10
cuda_memtest --stress
これにより、テスト10(ストレステスト)が実行されます。 --stress
は、 --disable_all --enable_test 10 --exit_on_error
に相当します
cuda_memtest --stress --num_iterations 100 --num_passes 1
これは、テスト10の短期間でGPUの素早い正気チェックを行います。これについては、後で詳しく説明します。
ヘルプメッセージを参照してください
cuda_memtest --help
ディレクトリには簡単なスクリプトsanity_check.sh
があります。このスクリプトは、1つのGPUまたはすべてのGPUが健康状態にあるかどうかを簡単に確認します。
使用例:
# 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
フォークノート: cuda_memtest
バイナリを直接実行するだけです。このスクリプトをインスピレーションなどのソースとして考えてください。
AMD HIPでコンパイルしたとしても、ツールバイナリはcuda_memtest
と名付けられます。
HIPを介してAMD GPUで実行すると、ツールは股関節の代わりにどこにでもCUDAに言及します。
このコードベースのOPENCLバージョンを維持していません。 opencl機能を復元して更新するリクエストをプルすることを歓迎します。
ランニング
cuda_memtest --list_tests
すべてのテストとその短い説明を印刷します。2009年6月18日現在、11のテストを実装しました
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]
最初に、パターンを書くためにカーネルが起動されます。次に、メモリをフラッシュできるようにカーネルを出ます。次に、新しいカーネルを起動して、値がパターンと一致するかどうかを読み取り、確認します。各メモリの場所に一致しない場合、エラーが記録されます。同じカーネルでは、パターンの補体はチェック後に記述されます。 3番目のカーネルが起動して値を再度読み取り、パターンの補完に対してチェックします。
テスト0 [Walking 1 bit]
このテストは、メモリアドレスで1回1回変更して、別のメモリの位置に移動することを確認します。アドレスワイヤをテストするように設計されています。
テスト1 [Own address test]
各メモリの位置には、独自のアドレスが入っています。次のカーネルは、各メモリの位置の値が引き続きアドレスと一致するかどうかを確認します。
テスト2 [Moving inversions, ones&zeros]
このテストでは、すべてのものとゼロのパターンを備えた移動反転アルゴリズムを使用します。
テスト3 [Moving inversions, 8 bit pat]
これはテスト1と同じですが、「ウォーキング」のパターンとゼロの8ビットパターンを使用します。このテストは、「広い」メモリチップの微妙なエラーをよりよく検出します。
テスト4 [Moving inversions, random pattern]
テスト4はテスト1と同じアルゴリズムを使用しますが、データパターンは乱数であり、補完されます。このテストは、データに敏感なエラーを検出するのが難しいと感じるのに特に効果的です。乱数シーケンスは各パスで異なるため、複数のパスが有効性を高めます。
テスト5 [Block move, 64 moves]
このテストは、ブロックメモリを移動することによりメモリを強調します。メモリは、8バイトごとに反転するシフトパターンで初期化されます。その後、メモリのブロックが動き回られます。動きが完了すると、データパターンがチェックされます。データはメモリの移動が完了した後にのみチェックされるため、エラーが発生した場所を知ることはできません。報告されたアドレスは、悪いパターンが見つかった場所のみです。
テスト6 [Moving inversions, 32 bit pat]
これは、連続するアドレスごとにデータパターンを1ビットにシフトする移動する反転アルゴリズムのバリエーションです。開始ビット位置は、パスごとに残りシフトされます。すべての可能なデータパターンを使用するには、32パスが必要です。このテストは、データに敏感なエラーを検出するのに非常に効果的ですが、実行時間は長いです。
テスト7 [Random number sequence]
このテストでは、一連の乱数をメモリに書き込みます。メモリのブロック(1 MB)は、ランダムパターンで初期化されます。これらのパターンとその補完は、残りの記憶を使用した移動反転テストに使用されます。
テスト8 [Modulo 20, random pattern]
ランダムパターンが生成されます。このパターンは、メモリに20番目のメモリの位置ごとに設定するために使用されます。メモリ位置の残りの部分は、パターンの補体に設定されています。これを20回繰り返し、メモリの位置が毎回パターンを設定するたびに右にシフトします。
テスト9 [Bit fade test, 90 min, 2 patterns]
ビットフェードテストは、すべてのメモリをパターンで初期化し、90分間スリープします。次に、メモリを調べて、メモリビットが変更されたかどうかを確認します。すべてのものとすべてのゼロパターンが使用されます。このテストは完了するまでに3時間かかります。ビットフェードテストはデフォルトで無効になっています
テスト10 [memory stress test]
私たちができる限り記憶を強調します。ランダムパターンが生成され、すべてのメモリをパターンに設定するために、大きなグリッドサイズとブロックサイズのカーネルが起動します。前の書き込みカーネルの直後に新しい読み取りおよび書き込みカーネルが起動して、メモリにエラーがあるかどうかを確認し、メモリを補数に設定します。このプロセスは、1つのパターンで1000回繰り返されます。カーネルは、グローバルメモリとGPUの間の最大帯域幅を達成するように書かれています。これにより、ソフトウェアエラーが発生する可能性が高まります。実際には、このテストはハードウェアエラーをフラッシュするのにも非常に役立ちました。