يختبر هذا البرنامج ذاكرة GPU لأخطاء الأجهزة والأخطاء الناعمة باستخدام CUDA (أو OPENCL).
هذا شوكة للمشروع الأصلي الذي لم يتم صيانته منذ فترة طويلة على https://sourceforge.net/projects/cudagpumemtest/.
بعد شوكةنا في عام 2013 (v1.2.3) ، ركزنا في المقام الأول على دعم إصدارات CUDA الأحدث ودعم أجهزة NVIDIA الأحدث. ومع ذلك ، لا تزال عمليات السحب التي تحافظ على إصدارات OpenCL موضع ترحيب.
رخصة المصدر المفتوح في إلينوي
جامعة إلينوي/NCSA
ترخيص مفتوح المصدر
حقوق الطبع والنشر 2009-2012 ، جامعة إلينوي. جميع الحقوق محفوظة.
حقوق الطبع والنشر 2013-2019 ، مطورو Picongpu في Helmholtz-Zentrum Dresden-Rossendorf
تم تطويره بواسطة:
مختبر الأنظمة المبتكرة
المركز الوطني لتطبيقات الحوسبة الفائقة
http://www.ncsa.uiuc.edu/aboutus/directorates/isl.html
متشوق وصيانته ل GPU NVIDIA الأحدث منذ عام 2013 من قبل:
أكسل هوبل وريني أوستررا
مجموعة الفيزياء الإشعاعية الحسابية
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
في مدير حزمة Spack.
cuda_memtest
السلوك الافتراضي هو إجراء الاختبار على جميع وحدات معالجة الرسومات المتاحة بلا حدود. هناك خيارات لتغيير السلوك الافتراضي.
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
هناك نص SCRIPT sanity_check.sh
في الدليل. يقوم هذا البرنامج النصي بفحص سريع ما إذا كانت وحدة معالجة الرسومات أو جميع وحدات معالجة الرسومات في صحة سيئة.
مثال الاستخدام:
# 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
.
إذا قمت بتشغيل AMD GPU عبر HIP ، فسيذكر الأداة في كل مكان CUDA بدلاً من الورك.
نحن لا نحافظ على إصدار OpenCL من قاعدة الرمز هذه. سحب طلبات استعادة وتحديث إمكانيات OpenCL موضع ترحيب.
جري
cuda_memtest --list_tests
سيتم طباعة جميع الاختبارات وأوصافها القصيرة ، اعتبارًا من 6/18/2009 ، قمنا بتنفيذ 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]
أولاً يتم إطلاق نواة لكتابة نمط. ثم نخرج من النواة بحيث يمكن مسح الذاكرة. ثم نبدأ نواة جديدة لقراءة والتحقق مما إذا كانت القيمة تتطابق مع النمط. يتم تسجيل خطأ إذا لم يتطابق مع كل موقع ذاكرة. في نفس النواة ، يتم كتابة تكملة النمط بعد التحقق. تم إطلاق kernel الثالث لقراءة القيمة مرة أخرى والتحقق من تكملة النمط.
اختبار 0 [Walking 1 bit]
يغير هذا الاختبار بت واحد في عنوان الذاكرة لرؤيته يذهب إلى موقع ذاكرة مختلف. وهي مصممة لاختبار أسلاك العناوين.
اختبار 1 [Own address test]
يتم ملء كل موقع ذاكرة بعنوانه الخاص. يتحقق kernel التالي إذا كانت القيمة في كل موقع للذاكرة لا تزال تتفق مع العنوان.
اختبار 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 ميغابايت) من الذاكرة مع أنماط عشوائية. يتم استخدام هذه الأنماط والمكملات في اختبار الانقلابات مع بقية الذاكرة.
اختبار 8 [Modulo 20, random pattern]
يتم إنشاء نمط عشوائي. يستخدم هذا النمط لضبط كل موقع ذاكرة 20 في الذاكرة. يتم تعيين بقية موقع الذاكرة على تكملة النمط. كرر هذا لمدة 20 مرة وفي كل مرة يتم تحويل موقع الذاكرة لتعيين النمط بشكل صحيح.
اختبار 9 [Bit fade test, 90 min, 2 patterns]
يقوم اختبار البت بتهيئة جميع الذاكرة بنمط ثم ينام لمدة 90 دقيقة. ثم يتم فحص الذاكرة لمعرفة ما إذا كانت أي بتات الذاكرة قد تغيرت. يتم استخدام كل الأنماط وجميع أنماط الصفر. هذا الاختبار يستغرق 3 ساعات لإكمال. تم تعطيل اختبار التلاشي بت
اختبار 10 [memory stress test]
الذاكرة الإجهاد بقدر ما نستطيع. يتم إنشاء نمط عشوائي ويتم إطلاق نواة من حجم الشبكة الكبيرة وحجم الكتلة لتعيين جميع الذاكرة على النمط. يتم إطلاق kernel القراءة والكتابة الجديدة مباشرة بعد kernel الكتابة السابقة للتحقق مما إذا كانت هناك أي أخطاء في الذاكرة وتعيين الذاكرة على المكمل. تتكرر هذه العملية لمدة 1000 مرة لنمط واحد. تتم كتابة kernel لتحقيق أقصى عرض النطاق الترددي بين الذاكرة العالمية و GPU. هذا سيزيد من فرصة اصطياد خطأ البرنامج. في الممارسة العملية ، وجدنا هذا الاختبار مفيدًا جدًا لطرد أخطاء الأجهزة أيضًا.