ซอฟต์แวร์อะไรดีที่ใช้สำหรับการดีบักแบบขนาน?


24

ฉันไม่ได้ใช้งานรหัสขนานใด ๆ ในตอนนี้ แต่ฉันคาดว่าจะเรียกใช้รหัสขนานในอนาคตโดยใช้ลูกผสมของ OpenMP และ MPI เครื่องมือแก้จุดบกพร่องเป็นเครื่องมือที่มีค่าสำหรับฉันเมื่อใช้งานโครงการแบบอนุกรม

ใครสามารถแนะนำ debugger แบบขนาน (หรือ debuggers หลายรายการ) เพื่อใช้สำหรับการดีบักซอฟต์แวร์แบบขนานได้หรือไม่ ซอฟต์แวร์ฟรีน่าจะดีกว่า แต่อย่าลังเลที่จะพูดถึงซอฟต์แวร์เชิงพาณิชย์ที่มีประสิทธิภาพ


ฉันไม่เห็นว่าคำตอบที่นี่จะแตกต่างอย่างมีนัยสำคัญจากstackoverflow.com/questions/329259/หรือไม่ MPI เป็นส่วนที่ยากไม่ใช่ OpenMP ไม่ว่าในกรณีใดการดีบักสภาวะการแข่งขันในโปรแกรมที่เธรดจะไม่สามารถแก้ไขได้ในขณะนี้
Jeff

ThreadSanitizer เป็นทางออกที่ดีสำหรับการแก้ไขข้อบกพร่องในการแข่งขันในโปรแกรม threaded แต่ฉันรู้ว่าไม่มีใครที่พยายามเพิ่ม MPI ในส่วนผสม!
mabraham

คำตอบ:


17

โดยทั่วไปมีสองตัวเลือกที่สำคัญเชิงพาณิชย์ออกมี: DDTจาก Allinea (ซึ่งเป็นสิ่งที่เราใช้ที่TACC ) และ Totalview (ดังที่กล่าวไว้ในความคิดเห็นอื่น ๆ ) พวกเขามีคุณสมบัติที่เปรียบเทียบได้มีการพัฒนาอย่างแข็งขันและเป็นคู่แข่งโดยตรง

Eclipse มีแพลตฟอร์มเครื่องมือแบบขนานซึ่งควรมีการสนับสนุนการเขียนโปรแกรม MPI และ OpenMP และดีบักเกอร์แบบขนาน


ฉันไม่เคยได้ยินใครที่ใช้ PTP ดีบักเกอร์แบบขนาน ผมไม่แน่ใจว่าหมายความว่า ...
เจฟฟ์

ฉันมีเพื่อนร่วมงานไม่กี่คนที่พยายาม แต่ฉันไม่เคยเล่นด้วยตัวเอง
Bill Barth

16

ฉันต้องตอบ curmudgeon ผลผลิตของฉันไม่เคยได้รับการปรับปรุงโดยคำแนะนำใด ๆ ข้างต้น พวกเขาช้าและมีราคาแพงเมื่อเทียบกับตัวเลือกที่ฉันต้องการในแบบคู่ขนาน: หนึ่งเซสชัน gdb ต่อกระบวนการ gdb แต่ละตัวสามารถเชื่อมต่อกับกระบวนการ MPI และนั่งใน xterm (เกิดขึ้นโดยอัตโนมัติใน PETSc ที่ใช้-start_in_debugger) ฉันใช้มันมา 15 ปีอย่างมีความสุข คัดค้าน:

1) ฉันไม่สามารถดูข้อมูลทั่วโลกได้

เนื่องจาก MPI เป็นรุ่นที่ไม่มีผู้ใช้ร่วมกันจึงไม่มีข้อมูลทั่วโลกเป็นข้อมูลภายในเครื่องเท่านั้น

2) กลยุทธ์นี้ไม่ได้ขยายไปสู่กระบวนการจำนวนมาก

ไม่มีข้อบกพร่อง บั๊กเกิดขึ้นในแต่ละกระบวนการอาจมีอินพุตจาก 1 หรือ 2 เพื่อนบ้าน คุณสามารถวางไข่ gdb ได้อย่างง่ายดายเฉพาะในกระบวนการที่เข้าร่วม (ใน PETSc ที่คุณใช้-debugger_nodes 0,5,17เป็นต้น) นอกจากนี้ระบบดังกล่าวข้างต้นยังให้ประโยชน์อย่างมากเมื่อเรียกใช้ในทุกกระบวนการซึ่งทำให้ช้าลง ในความเป็นจริงแล้ววิธีการ gdb นั้นสามารถปรับขนาดได้มากกว่า

gdb ยังพกพาได้มาก มันทำงานได้ทุกที่เข้าใจ C ++ และ Fortran และอนุญาตให้คุณรันโค้ดโดยพลการในการรัน ฉันได้เขียนฟังก์ชั่นพิเศษเพื่อแสดงข้อมูลได้อย่างง่ายดายเมื่อทำงานในนั้น


4
เฮ้ขี้ขลาดถ้าคุณลงคะแนนแสดงความคิดเห็น
Matt Knepley

5
ฉันไม่ได้ลงคะแนน แต่ฉันไม่เห็นด้วยในระดับหนึ่ง ฉันพบข้อบกพร่องเล็กน้อยในระดับที่ไม่แสดงในขนาดเล็กและการใช้ตัวดีบักแบบขนานเป็นวิธีที่มีประสิทธิภาพในการค้นหา ฉันทำการดีบักส่วนใหญ่ด้วย printf และแนบกับแต่ละกระบวนการด้วย gdb แต่ฉันได้เห็นประโยชน์ของการดีบักเกอร์แบบขนาน
Bill Barth

3
ครั้งเดียวที่ฉันเคยพบข้อผิดพลาดในระดับนั้นเป็นข้อบกพร่องด้านประสิทธิภาพเนื่องจากอัลกอริทึมการสื่อสารแบบกลุ่มที่ไม่เหมาะสมถูกเลือก จากนั้นอีกครั้งมุมมองของฉันยิ่งกว่าของ Matt มากที่สุดเนื่องจากสิ่งที่ใกล้เคียงที่สุดกับตัวดีบักที่ฉันเคยใช้คือ valgrind
Jack Poulson

1
@BillBarth ฉันรู้ว่าคุณมีข้อบกพร่องที่มีอยู่ใน 1,000 โพรเซสที่ไม่แสดงปัญหาเล็ก ๆ (Dinesh มี PETSc ที่มีชื่อเสียงที่กินเวลานานหลายเดือน ประเด็นของฉันคือการต่อต้านสติปัญญาที่แพร่หลาย ฉันคิดว่า debuggers แบบขนานเป็นทางเลือกสุดท้ายไม่ใช่ทางเลือกแรก
Matt Knepley

3
ฉันลงคะแนนให้คุณ คำตอบของคุณไม่ใช่สิ่งที่ถูกถาม
aterrel

5

ฉันใช้ดีบั๊กเกอร์เพียงสองตัวสำหรับโปรแกรมอนุกรมและขนาน:

  1. ดีบักเกอร์ Kernighan คือข้อความพิมพ์ที่มีเหตุผลและการคิดอย่างรอบคอบ
  2. หลายกรณีของ GDB ตามที่อธิบายไว้ o http://www.open-mpi.org/faq/?category=debugging#serial-debuggers

ในกรณีที่ (2) ไม่สามารถปรับขนาดได้อย่างเพียงพอฉันหมายถึง (1b)


1
ฉันไม่เคยได้ยินชื่อ "Kernighan debugger" แต่ฉันอนุมัติเพราะเป็นวิธีที่ฉันดีบักเสมอ
Jack Poulson

4

มีIntel Parallel Studioซึ่งรวมถึงดีบักเกอร์แบบขนาน ฉันไม่เคยทำงานด้วย แต่ได้เห็นมันใช้ในการสาธิตไม่กี่ครั้ง นี่คือวิดีโอสอนที่แสดงคุณสมบัติบางอย่าง

ฉันยังเห็น wrapper รอบ gdb ที่ทำงานได้ดีพอสมควรในบางกรณี


3

Totalview มันเป็นดีบักเกอร์เชิงพาณิชย์ มันง่ายมากที่จะดูสแต็คในโปรเซสเซอร์แต่ละตัว คุณสามารถดูค่าตัวแปร (และเปลี่ยนแปลงได้) ในโปรเซสเซอร์ / เธรด คุณสามารถพล็อตเวกเตอร์หรือ matracies เพื่อให้เห็นภาพค่าตัวแปร เห็นได้ชัดว่าการเขียนสคริปต์ก็เป็นไปได้เช่นกัน (Tk / Tcl) สำหรับการวิเคราะห์จุดเฝ้าดูที่ซับซ้อน แต่ฉันไม่เคยทำงานด้วยตัวเอง


ในด้านอัตนัยเมื่อศูนย์ HPC ของมหาวิทยาลัยของฉันติดตั้งสิ่งนี้ฉันคิดว่ามันเกินความจริง จากนั้นฉันก็พบว่าการแก้จุดบกพร่องที่ซับซ้อนนั้นทำได้ง่ายเพียงใด มันเป็นโปรแกรมที่ยอดเยี่ยมจริงๆ
ยานน์

ฉันดูภาพรวมที่สองด้วย ฉันได้ใช้มันในหลายกรณีและมันมีประโยชน์อย่างมากแม้จะราคาแพงมาก ...
พูดมาก


1

ฉันสงสัยว่าทำไมไม่มีใครพูดถึงPadb (Parallel Application Debugger) ซึ่งเป็นโอเพ่นซอร์สและซอฟต์แวร์ฟรีเหมือนกับ OP ที่ชอบ แต่ไม่แรงพอ ๆ กับตัวอย่างในเชิงพาณิชย์เช่น TotalView for HPC


-1

ต่อไปนี้เป็นคำตอบบางส่วนที่ฉันได้รับ:

OpenMP มีฟังก์ชั่นจับเวลา: omp_get_wtime()และomp_get_wtick()- เอกสารออนไลน์

Google มีผู้สร้างโปรไฟล์ CPU

มีScalascaที่ใช้โปรไฟล์และการวิเคราะห์ OpenMP และ MPI

จากนั้นก็มีTauและVtuneซึ่งฉันไม่ได้ใช้

โชคดี!


ฉันไม่คิดว่าคำถามเกี่ยวกับเวลา แต่ฉันอาจผิด คำแนะนำที่ดีแม้ว่า ...
Yann

คำตอบนี้เป็นเรื่องเกี่ยวกับการทำโปรไฟล์มากกว่าการดีบัก ...
mbq

ฉันพบว่าเครื่องมือการทำโปรไฟล์ทำหน้าที่ทดแทนที่ดีสำหรับการดีบั๊กแบบขนาน ฉันพบว่าบ่อยครั้งที่ข้อบกพร่องแบบขนานเกี่ยวข้องกับปัญหาด้านประสิทธิภาพเช่น logjam ใน MPI เครื่องมือประสิทธิภาพมักจะเปิดเผยสิ่งนี้ ตัวสร้างโปรไฟล์หน่วยความจำของ TAU นั้นดีสำหรับการค้นหาสาเหตุที่อาจมี segfaults แบบสุ่ม
Jeff
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.