Perangkat lunak ini menguji memori GPU untuk kesalahan perangkat keras dan kesalahan lunak menggunakan CUDA (atau OpenCL).
Ini adalah garpu dari proyek asli, namun lama yang belum lama di https://sourceForge.net/projects/cudagpumemtest/.
Setelah Fork kami pada tahun 2013 (v1.2.3), kami terutama fokus pada dukungan untuk versi CUDA yang lebih baru dan dukungan perangkat keras NVIDIA yang lebih baru. Permintaan menarik mempertahankan versi opencl tetap diterima.
Illinois Lisensi Open Source
University of Illinois/NCSA
Lisensi Sumber Terbuka
Hak Cipta 2009-2012, Universitas Illinois. Semua hak dilindungi undang -undang.
Hak Cipta 2013-2019, Pengembang Picongpu di Helmholtz-Zentrum Dresden-Rossendorf
Dikembangkan oleh:
Lab Sistem Inovatif
Pusat Nasional untuk Aplikasi Superkomputer
http://www.ncsa.uiuc.edu/aboutus/directorates/isl.html
Forked dan dipelihara untuk GPU NVIDIA yang lebih baru sejak 2013 oleh:
Axel Huebl dan Rene Widera
Kelompok Fisika Radiasi Komputasi
Helmholtz-Zentrum Dresden-Rossendorf
https://www.hzdr.de/crp
Izin dengan ini diberikan, gratis, kepada siapa pun yang mendapatkan salinan perangkat lunak ini dan file dokumentasi terkait ("perangkat lunak"), untuk menangani perangkat lunak tanpa batasan, termasuk tanpa batasan hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , menerbitkan, mendistribusikan, sublisense, dan/atau menjual salinan perangkat lunak, dan untuk mengizinkan orang -orang yang dilengkapi dengan perangkat lunak untuk melakukannya, tunduk pada kondisi berikut:
Redistribusi kode sumber harus mempertahankan pemberitahuan hak cipta di atas, daftar kondisi ini dan penafian berikut.
Redistribusi dalam bentuk biner harus mereproduksi pemberitahuan hak cipta di atas, daftar kondisi ini dan penafian berikut dalam dokumentasi dan/atau bahan lain yang disediakan dengan distribusi.
Baik nama Lab Sistem Inovatif, Pusat Nasional untuk Superkomputer Aplikasi, maupun nama -nama kontributornya dapat digunakan untuk mendukung atau mempromosikan produk yang berasal dari perangkat lunak ini tanpa izin tertulis sebelumnya.
Perangkat lunak ini disediakan "sebagaimana adanya", tanpa jaminan apa pun, tersurat maupun tersirat, termasuk tetapi tidak terbatas pada jaminan dapat diperjualbelikan, kebugaran untuk tujuan tertentu dan nonpringement. Dalam hal apa pun, para kontributor atau pemegang hak cipta tidak akan bertanggung jawab atas klaim, kerusakan atau tanggung jawab lainnya, baik dalam tindakan kontrak, gugatan atau sebaliknya, yang timbul dari, di luar atau sehubungan dengan perangkat lunak atau penggunaan atau transaksi lain dengan transaksi lainnya PERANGKAT LUNAK.
Di dalam direktori sumber, jalankan:
mkdir build
cd build
# build for NVIDIA architecture sm_35
cmake -DCMAKE_CUDA_ARCHITECTURES=35 ..
make
Di dalam direktori sumber, jalankan:
mkdir build
cd build
# build for NVIDIA architecture MI2XX
cmake -DCUDA_MEMTEST_BACKEND=hip -DGPU_TARGETS=gfx90a ..
make
Catatan:
..
adalah jalur ke direktori sumber. Kami juga menyediakan paket cuda-memtest
di Spack Package Manager.
cuda_memtest
Perilaku default menjalankan tes pada semua GPU yang tersedia tanpa batas. Ada opsi untuk mengubah perilaku default.
cuda_memtest --disable_all --enable_test 10
cuda_memtest --stress
Ini menjalankan tes 10 (tes stres). --stress
setara dengan --disable_all --enable_test 10 --exit_on_error
cuda_memtest --stress --num_iterations 100 --num_passes 1
Yang ini melakukan pemeriksaan kewarasan cepat untuk GPU dengan tes singkat 10. Lebih lanjut tentang ini nanti.
Lihat Pesan Bantuan oleh
cuda_memtest --help
Ada skrip sederhana sanity_check.sh
di direktori. Skrip ini melakukan pemeriksaan cepat jika satu GPU atau semua GPU dalam kesehatan yang buruk.
Contoh Penggunaan:
# 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
Catatan Fork: Kami hanya menjalankan biner cuda_memtest
secara langsung. Pertimbangkan skrip ini sebagai sumber inspirasi, atau lebih.
Bahkan jika Anda mengkompilasi dengan AMD Hip, Binary Alat akan dinamai cuda_memtest
.
Jika Anda menjalankan AMD GPU melalui HIP, alat ini akan menyebutkan di mana -mana CUDA, bukannya pinggul.
Kami tidak mempertahankan versi opencl dari basis kode ini. Permintaan tarik memulihkan dan memperbarui kemampuan opencl dipersilakan.
Berlari
cuda_memtest --list_tests
Akan mencetak semua tes dan deskripsi pendeknya, pada 6/18/2009, kami menerapkan 11 tes
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]
Pertama, kernel diluncurkan untuk menulis pola. Lalu kami keluar dari kernel sehingga memori bisa memerah. Kemudian kami memulai kernel baru untuk membaca dan memeriksa apakah nilainya cocok dengan polanya. Kesalahan direkam jika tidak cocok untuk setiap lokasi memori. Dalam kernel yang sama, pelengkap polanya ditulis setelah pemeriksaan. Kernel ketiga diluncurkan untuk membaca nilainya lagi dan memeriksa terhadap pelengkap polanya.
Tes 0 [Walking 1 bit]
Tes ini berubah satu bit waktu dalam alamat memori untuk melihatnya pergi ke lokasi memori yang berbeda. Ini dirancang untuk menguji kabel alamat.
Tes 1 [Own address test]
Setiap lokasi memori diisi dengan alamatnya sendiri. Kernel berikutnya memeriksa apakah nilai di setiap lokasi memori masih setuju dengan alamat tersebut.
Tes 2 [Moving inversions, ones&zeros]
Tes ini menggunakan algoritma inversi bergerak dengan pola semua dan nol.
Tes 3 [Moving inversions, 8 bit pat]
Ini sama dengan tes 1 tetapi menggunakan pola "berjalan" 8 bit dan nol. Tes ini akan lebih baik mendeteksi kesalahan halus dalam chip memori "lebar".
Tes 4 [Moving inversions, random pattern]
Tes 4 menggunakan algoritma yang sama dengan tes 1 tetapi pola data adalah angka acak dan pelengkapnya. Tes ini sangat efektif dalam menemukan sulit untuk mendeteksi kesalahan sensitif data. Urutan angka acak berbeda dengan setiap lintasan sehingga beberapa lintasan meningkatkan efektivitas.
Tes 5 [Block move, 64 moves]
Tes ini menekankan memori dengan memindahkan kenangan blok. Memori diinisialisasi dengan pola pergeseran yang terbalik setiap 8 byte. Kemudian blok memori dipindahkan. Setelah perpindahan selesai, pola data diperiksa. Karena data diperiksa hanya setelah memori bergerak selesai, tidak mungkin untuk mengetahui di mana kesalahan terjadi. Alamat yang dilaporkan hanya untuk di mana pola buruk ditemukan.
Tes 6 [Moving inversions, 32 bit pat]
Ini adalah variasi dari algoritma inversi bergerak yang menggeser pola data yang tersisa satu bit untuk setiap alamat berturut -turut. Posisi bit awal digeser ke kiri untuk setiap umpan. Diperlukan semua pola data yang mungkin, 32 lintasan diperlukan. Tes ini cukup efektif dalam mendeteksi kesalahan sensitif data tetapi waktu eksekusi panjang.
Tes 7 [Random number sequence]
Tes ini menulis serangkaian angka acak ke dalam memori. Sebuah blok (1 MB) memori diinisialisasi dengan pola acak. Pola -pola ini dan pelengkapnya digunakan dalam uji inversi bergerak dengan sisa memori.
Tes 8 [Modulo 20, random pattern]
Pola acak dihasilkan. Pola ini digunakan untuk mengatur setiap lokasi memori ke -20 dalam memori. Sisa lokasi memori diatur ke pelengkap pola. Ulangi ini selama 20 kali dan setiap kali lokasi memori untuk mengatur pola digeser dengan benar.
Uji 9 [Bit fade test, 90 min, 2 patterns]
Tes bit fade menginisialisasi semua memori dengan pola dan kemudian tidur selama 90 menit. Kemudian memori diperiksa untuk melihat apakah ada bit memori yang telah berubah. Semua dan semua pola nol digunakan. Tes ini membutuhkan waktu 3 jam untuk menyelesaikannya. Tes bit fade dinonaktifkan secara default
Tes 10 [memory stress test]
Menekankan memori sebanyak yang kita bisa. Pola acak dihasilkan dan kernel dengan ukuran grid besar dan ukuran blok diluncurkan untuk mengatur semua memori ke pola. Kernel baca dan tulis baru diluncurkan segera setelah kernel tulis sebelumnya untuk memeriksa apakah ada kesalahan dalam memori dan mengatur memori ke komplemen. Proses ini diulangi untuk 1000 kali untuk satu pola. Kernel ditulis untuk mencapai bandwidth maksimum antara memori global dan GPU. Ini akan meningkatkan kemungkinan menangkap kesalahan perangkat lunak. Dalam praktiknya, kami menemukan tes ini cukup berguna untuk menyiram kesalahan perangkat keras juga.