ซอฟต์แวร์นี้ทดสอบหน่วยความจำ GPU สำหรับข้อผิดพลาดของฮาร์ดแวร์และข้อผิดพลาดที่อ่อนนุ่มโดยใช้ cuda (หรือ opencl)
นี่คือส้อมของโครงการดั้งเดิม แต่ยังไม่ได้รับการดูแลเป็นเวลานานที่ https://sourceforge.net/projects/cudagpumemtest/
หลังจากส้อมของเราในปี 2013 (v1.2.3) เรามุ่งเน้นไปที่การสนับสนุนสำหรับรุ่น CUDA รุ่นใหม่และการสนับสนุนฮาร์ดแวร์ Nvidia รุ่นใหม่ การดึงแบบดึงการบำรุงรักษาเวอร์ชัน OpenCl ยังคงได้รับการต้อนรับ
ใบอนุญาตโอเพ่นซอร์สของรัฐอิลลินอยส์
มหาวิทยาลัยอิลลินอยส์/NCSA
ใบอนุญาตโอเพ่นซอร์ส
ลิขสิทธิ์ 2552-2555 มหาวิทยาลัยอิลลินอยส์ สงวนลิขสิทธิ์
ลิขสิทธิ์ 2013-2019 นักพัฒนา Picongpu ที่ Helmholtz-Zentrum Dresden-Rossendorf
พัฒนาโดย:
ห้องปฏิบัติการระบบนวัตกรรม
ศูนย์แอปพลิเคชั่นแห่งชาติ
http://www.ncsa.uiuc.edu/aboutus/directorates/isl.html
ฟอร์คและบำรุงรักษาสำหรับ Nvidia GPU รุ่นใหม่ตั้งแต่ปี 2013 โดย:
Axel Huebl และ Rene Widera
กลุ่มฟิสิกส์รังสีคำนวณ
Helmholtz-Zentrum Dresden-Rossendorf
https://www.hzdr.de/crp
ได้รับอนุญาตโดยไม่เสียค่าใช้จ่ายสำหรับบุคคลใด ๆ ที่ได้รับสำเนาซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") เพื่อจัดการกับซอฟต์แวร์โดยไม่มีการ จำกัด รวมถึง แต่ไม่ จำกัด เฉพาะสิทธิ์ในการใช้คัดลอกแก้ไขผสาน เผยแพร่แจกจ่าย sublicense และ/หรือขายสำเนาของซอฟต์แวร์และอนุญาตให้บุคคลที่ซอฟต์แวร์ได้รับการตกแต่งให้ทำเช่นนั้นภายใต้เงื่อนไขดังต่อไปนี้:
การแจกจ่ายซ้ำของซอร์สโค้ดจะต้องรักษาประกาศลิขสิทธิ์ข้างต้นรายการเงื่อนไขและข้อจำกัดความรับผิดชอบต่อไปนี้
การแจกจ่ายซ้ำในรูปแบบไบนารีจะต้องทำซ้ำประกาศลิขสิทธิ์ข้างต้นรายการเงื่อนไขและข้อจำกัดความรับผิดชอบต่อไปนี้ในเอกสารและ/หรือวัสดุอื่น ๆ ที่ได้รับการแจกจ่าย
ไม่ว่าจะเป็นชื่อของห้องปฏิบัติการระบบนวัตกรรมศูนย์แห่งชาติสำหรับแอพพลิเคชั่นซูเปอร์คอมพิวเตอร์หรือชื่อของผู้มีส่วนร่วมอาจถูกนำมาใช้เพื่อรับรองหรือส่งเสริมผลิตภัณฑ์ที่ได้จากซอฟต์แวร์นี้โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษรล่วงหน้า
ซอฟต์แวร์มีให้ "ตามสภาพ" โดยไม่มีการรับประกันใด ๆ ไม่ว่าโดยชัดแจ้งหรือโดยนัยรวมถึง แต่ไม่ จำกัด เฉพาะการรับประกันความสามารถในการค้าการออกกำลังกายสำหรับวัตถุประสงค์เฉพาะและการไม่เข้าร่วม ไม่ว่าในกรณีใดผู้มีส่วนร่วมหรือผู้ถือลิขสิทธิ์จะต้องรับผิดชอบต่อการเรียกร้องความเสียหายหรือความรับผิดอื่น ๆ ไม่ว่าจะเป็นการกระทำของสัญญาการละเมิดหรืออื่น ๆ ซอฟต์แวร์.
ภายในไดเรกทอรีต้นฉบับ Run:
mkdir build
cd build
# build for NVIDIA architecture sm_35
cmake -DCMAKE_CUDA_ARCHITECTURES=35 ..
make
ภายในไดเรกทอรีต้นฉบับ Run:
mkdir build
cd build
# build for NVIDIA architecture MI2XX
cmake -DCUDA_MEMTEST_BACKEND=hip -DGPU_TARGETS=gfx90a ..
make
บันทึก:
..
เป็นเส้นทางไปยังไดเรกทอรีต้นฉบับ นอกจากนี้เรายังมีแพ็คเกจ cuda-memtest
ใน Spack Package Manager
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
อันนี้ทำการตรวจสอบความมีสติอย่างรวดเร็วสำหรับ GPU ด้วยการทดสอบระยะสั้น 10 เพิ่มเติมในภายหลัง
ดูข้อความช่วยเหลือโดย
cuda_memtest --help
มีสคริปต์ง่ายๆ sanity_check.sh
ในไดเรกทอรี สคริปต์นี้ตรวจสอบอย่างรวดเร็วว่าหนึ่ง 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 Binary Tool จะมีชื่อว่า cuda_memtest
หากคุณทำงานบน AMD GPUs ผ่าน HIP เครื่องมือจะพูดถึงทุกที่ CUDA แทนที่จะเป็นสะโพก
เรา ไม่ ได้รักษาเวอร์ชัน OpenCL ของฐานรหัสนี้ ยินดีต้อนรับคำขอการกู้คืนและอัปเดตความสามารถของ OpenCl ยินดีต้อนรับ
วิ่ง
cuda_memtest --list_tests
จะพิมพ์การทดสอบทั้งหมดและคำอธิบายสั้น ๆ ของพวกเขา ณ วันที่ 6/18/2552 เราดำเนินการทดสอบ 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]
ครั้งแรกที่มีการเปิดตัวเคอร์เนลเพื่อเขียนรูปแบบ จากนั้นเราออกจากเคอร์เนลเพื่อให้ความทรงจำสามารถล้างออกได้ จากนั้นเราเริ่มเคอร์เนลใหม่เพื่ออ่านและตรวจสอบว่าค่าตรงกับรูปแบบหรือไม่ ข้อผิดพลาดจะถูกบันทึกหากไม่ตรงกันสำหรับแต่ละตำแหน่งหน่วยความจำ ในเคอร์เนลเดียวกันส่วนประกอบของรูปแบบจะถูกเขียนหลังจากการตรวจสอบ เคอร์เนลที่สามถูกเปิดตัวเพื่ออ่านค่าอีกครั้งและตรวจสอบกับส่วนประกอบของรูปแบบ
ทดสอบ 0 [Walking 1 bit]
การทดสอบนี้เปลี่ยนหนึ่งบิตต่อที่อยู่หน่วยความจำเพื่อดูว่าไปยังตำแหน่งหน่วยความจำอื่น มันถูกออกแบบมาเพื่อทดสอบสายที่อยู่
ทดสอบ 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]
นี่คือการเปลี่ยนแปลงของอัลกอริทึมการเคลื่อนย้ายที่เคลื่อนที่ซึ่งเปลี่ยนรูปแบบข้อมูลที่เหลือไว้หนึ่งบิตสำหรับที่อยู่ต่อเนื่องแต่ละที่ต่อเนื่อง ตำแหน่งบิตเริ่มต้นจะถูกเลื่อนไปทางซ้ายสำหรับแต่ละบัตร ในการใช้รูปแบบข้อมูลที่เป็นไปได้ทั้งหมด 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,000 ครั้งสำหรับหนึ่งรูปแบบ เคอร์เนลถูกเขียนขึ้นเพื่อให้ได้แบนด์วิดท์สูงสุดระหว่างหน่วยความจำทั่วโลกและ GPU สิ่งนี้จะเพิ่มโอกาสในการจับข้อผิดพลาดของซอฟต์แวร์ ในทางปฏิบัติเราพบว่าการทดสอบนี้ค่อนข้างมีประโยชน์ในการล้างข้อผิดพลาดของฮาร์ดแวร์เช่นกัน