ฉันกำลังเล่นกับPETScและสังเกตว่าเมื่อฉันรันโปรแกรมด้วยกระบวนการมากกว่าหนึ่งผ่านMPIดูเหมือนว่าจะทำงานช้าลง ! ฉันจะตรวจสอบเพื่อดูว่าเกิดอะไรขึ้น?
ฉันกำลังเล่นกับPETScและสังเกตว่าเมื่อฉันรันโปรแกรมด้วยกระบวนการมากกว่าหนึ่งผ่านMPIดูเหมือนว่าจะทำงานช้าลง ! ฉันจะตรวจสอบเพื่อดูว่าเกิดอะไรขึ้น?
คำตอบ:
สิ่งนี้สามารถเกิดขึ้นได้จากปัจจัยทางสถาปัตยกรรม :
หากมีแบนด์วิดท์หน่วยความจำเดียวกันสำหรับทั้งสองกระบวนการขึ้นไปคุณจะไม่เห็นความเร็วเลยตั้งแต่ SpMV และการดำเนินการพีชคณิตเชิงเส้นที่เกี่ยวข้องมีแบนด์วิดท์หน่วยความจำ จำกัด
อาจเป็นกรณีที่การสื่อสารอยู่เหนือการคำนวณของคุณ ตัวอย่างเช่นในวิธีการวนซ้ำแบบเชิงเส้นเราแนะนำให้มีอย่างน้อย 10,000 unknowns ต่อกระบวนการ
หรือปัจจัยที่เป็นตัวเลข :
ปัจจัยพื้นฐานขนานมักจะอ่อนแอกว่าคู่อนุกรมของพวกเขา ตัวอย่างเช่นบล็อก Jacobi ทำให้บล็อกยิ่งอ่อนแอยิ่งคุณใช้ ดังนั้นคุณต้องพิจารณาเวลาพิเศษที่ใช้ไปกับการทำซ้ำเชิงเส้นเพิ่มเติม เงื่อนไขที่ไม่เชิงเส้นโดยทั่วไปไม่ทำงานเช่นนี้ดังนั้นการวนซ้ำของนิวตันจึงมักจะคงที่
เมื่อใดก็ตามที่พยายามขนานโปรแกรมที่คุณต้องสมดุลจำนวนค่าใช้จ่าย แต่ส่วนใหญ่มี
หากการคำนวณของคุณขนานกันอย่างน่าอายค่าใช้จ่ายในการสื่อสารจะต่ำมาก (อินพุตและเอาต์พุตเท่านั้น) และค่าใช้จ่ายในการจัดการควรต่ำมาก
หากคุณมีการพึ่งพาซึ่งกันและกันระหว่างการคำนวณค่าใช้จ่ายในการสื่อสารสามารถเพิ่มขึ้นอย่างมาก หากคุณมีอัลกอริทึมที่ซับซ้อนซึ่งใช้เวลาแตกต่างกันในการคำนวณใด ๆ ความซับซ้อนในการจัดการจะเพิ่มขึ้นเมื่อคุณพยายามใช้ทรัพยากรที่มีอยู่อย่างมีประสิทธิภาพ
เช่นเดียวกับการเพิ่มประสิทธิภาพในรูปแบบใด ๆ ที่สำคัญคือมาตรฐาน ดูว่ามันทำงานอย่างไรโดยไม่ใช้ MPI, มันทำงานอย่างไรกับ MPI และกระบวนการเดียวจากนั้นดูว่ามันขยายขนาดได้อย่างไร
หากคุณกำลังเล่นกับ CUDA ลองให้มันมากข้อมูลได้มากขึ้น หนึ่งการทดสอบที่นี่ส่งผลให้เกิดความเร็วเชิงลบ เราให้ข้อมูลกับมันมากขึ้น 1,000 เท่าและรุ่น GP-GPU จะเสร็จในเวลาใกล้เคียงกันในขณะที่รุ่นที่ใช้งานบน CPU หลักนั้นใช้เวลานานกว่า 1,000 เท่า
ฉันอยากจะแนะนำให้คุณทำต่อไปนี้:
สร้างโปรไฟล์ของการประมวลผลเวลาของรหัสของคุณโดยมีและไม่มีการขนาน หากคุณมีข้อสงสัยเกี่ยวกับวิธีการทำเช่นนี้เราสามารถช่วยคุณได้หากคุณอธิบายรหัสของคุณได้ดีขึ้น
ตอนนี้คุณสามารถมุ่งเน้นไปที่ส่วนที่ทำงานช้าลงในแบบคู่ขนาน คุณควรทราบว่าการสื่อสารระหว่างกระบวนการอาจช้า เช่นเดียวกับมาร์คและฌอนชี้ให้เห็นเพียงเพราะปัญหาสามารถแบ่งออกเป็นเธรดไม่ได้หมายความว่าการทำเช่นนั้นจะมีประสิทธิภาพ คุณต้องดูให้ลึกซึ้งยิ่งขึ้น แต่ถ้าคุณใส่รหัสของคุณมันอาจช่วยคุณหาข้อผิดพลาดที่มีอยู่ สองเซ็นต์ของฉัน
หากคุณอธิบายสิ่งที่คุณกำลังทำในรายละเอียดเพิ่มเติมเช่นกับเวิร์กโฟลว์บางคนอาจให้คำอธิบายที่ดีกว่า