ตัวเลือกที่ดีที่สุดของตัวแก้ปัญหาสำหรับระบบสมมาตรแบบเบาบางขนาดใหญ่ (แต่ไม่ใช่ค่าบวกแน่นอน)


10

ขณะนี้ฉันกำลังทำงานเพื่อแก้ไขระบบสมมาตรขนาดใหญ่มาก (แต่ไม่แน่นอนแน่นอน) ที่สร้างขึ้นโดยอัลกอริทึมบางอย่าง เมทริกซ์เหล่านี้มีบล็อกความแจ่มใสที่ดีซึ่งสามารถใช้สำหรับการแก้แบบขนาน แต่ฉันไม่สามารถตัดสินใจได้ว่าฉันควรใช้วิธีการโดยตรง (เช่น Multi-frontal) หรือวนซ้ำ (GMRES หรือ MINRES ที่กำหนดเงื่อนไขไว้ล่วงหน้า) การศึกษาทั้งหมดของฉันแสดงให้เห็นว่าตัวแก้ซ้ำ (แม้จะมีการบรรจบกันอย่างรวดเร็วของการวนซ้ำภายใน 7 ครั้ง) ล้มเหลวในการเอาชนะผู้ปฏิบัติงานโดยตรงใน MATLAB แต่ในทางทฤษฎีแล้ววิธีการโดยตรงควรจะมีราคาสูงกว่า สิ่งนี้เกิดขึ้นได้อย่างไร? มีเอกสารหรือกระดาษที่ทันสมัยสำหรับกรณีดังกล่าวหรือไม่? ฉันสามารถใช้ sparsity แบบบล็อกในระบบคู่ขนานโดยใช้วิธีโดยตรงเช่นเดียวกับตัวแก้ซ้ำแบบยืดหยุ่นอย่าง GMRES


3
ฉันไม่คิดว่าผู้คนสามารถแสดงความคิดเห็นได้อย่างมีประสิทธิภาพจริง ๆ โดยไม่ทราบรายละเอียดเพิ่มเติมเกี่ยวกับเมทริกซ์เฉพาะของคุณ ขนาดคืออะไร รูปแบบ sparsity เป็นอย่างไร
Costis

2
n

2
คำถามนี้ซ้อนทับกันมากกับscicomp.stackexchange.com/q/81/276 ; คุณอาจพบข้อมูลที่เป็นประโยชน์ที่นั่น นอกจากนี้ตามคำถามนั้นอาจเป็นประโยชน์ในการพูดคุยเกี่ยวกับสเปกตรัมของผู้ให้บริการของคุณ
Geoff Oxberry

คำตอบ:


9

MUMPS ตัวแก้ปัญหากระจัดกระจายโดยตรงสามารถจัดการกับระบบไม่ จำกัด แบบสมมาตรและสามารถใช้ได้อย่างอิสระ ( http://graal.ens-lyon.fr/MUMPS/ ) Ian Duff เป็นหนึ่งในผู้เขียนทั้ง MUMPS และ MA57 ดังนั้นอัลกอริทึมจึงมีความคล้ายคลึงกันมากมาย

MUMPS ได้รับการออกแบบสำหรับคอมพิวเตอร์แบบขนานหน่วยความจำแบบกระจาย แต่ก็ใช้งานได้ดีกับเครื่องที่ใช้โปรเซสเซอร์เดี่ยว หากคุณเชื่อมโยงกับไลบรารี BLAS แบบหลายเธรดคุณสามารถบรรลุความเร็วสูงสุดที่เหมาะสมบนหน่วยความจำที่ใช้ร่วมกันโปรเซสเซอร์แบบมัลติคอร์

คุณไม่ได้บอกว่า "ใหญ่มาก" นั้นมีขนาดใหญ่เพียงใด แต่ MUMPS ยังมีความสามารถนอกหลักในการจัดการกับปัญหาที่เมทริกซ์แฟคตอริ่งจะไม่พอดีกับหน่วยความจำที่มีอยู่


7

ปัญหาทั่วไปที่นักแก้ปัญหาโดยตรงกำลังเผชิญอยู่คือปรากฏการณ์การเติมข้อมูลซึ่งหมายความว่าค่าผกผันของเมทริกซ์เบาบางอาจหนาแน่น สิ่งนี้นำไปสู่ความต้องการหน่วยความจำขนาดใหญ่หากโครงสร้างของเมทริกซ์ไม่ "เหมาะสม"

มีความพยายามที่จะแก้ไขปัญหาเหล่านี้และluฟังก์ชั่นเริ่มต้นของฟังก์ชันMATLAB ใช้สองสามข้อ ดูhttp://www.mathworks.de/de/help/matlab/ref/lu.htmlสำหรับภาพรวมของการเรียงสับเปลี่ยนการปรับสเกลในแนวทแยงมุมและอื่น ๆ สิ่งนี้ถือเป็นเรื่องจริงสำหรับแพคเกจขั้นสูงเช่น MUMPS ( http://graal.ens-lyon.fr/MUMPS/ )

โดยทั่วไปแล้วหากปัญหาของคุณมีขนาดใหญ่พอคุณจะไปถึงขอบเขตของหน่วยความจำนั้นและคุณจะต้องใช้วิธีการวนซ้ำ (Krylov)

หากปัญหาของคุณสมมาตรและไม่ จำกัด ระยะทางอาจเป็นตัวเลือกที่ชัดเจน อย่างไรก็ตามโปรดทราบว่า GMRES และ MINRES ทำสิ่งเดียวกันในเลขคณิตที่แน่นอนหากปัญหานั้นสมมาตร แต่ GMRES มีแนวโน้มที่จะได้รับความทุกข์น้อยลงจากการสูญเสีย orthogonality ดังนั้นบางคนมองว่า GMRES เป็น "การดำเนินการที่ดีที่สุดของ MINRES"

ไม่ว่าในกรณีใดคุณอาจได้รับประโยชน์จากการปรับระบบล่วงหน้า หากคุณไม่ต้องการที่จะใช้เวลาในการปรับสภาพให้เหมาะสม preconditioner LU-factorization preconditioner (ILU) ที่ไม่สมบูรณ์อาจจะพาคุณไปที่อื่นได้


2

ตัวแก้แบบวนซ้ำใด ๆ สามารถเอาชนะวิธีการโดยตรงหากปัญหามีขนาดใหญ่พอสมควร (ขนาดใหญ่ขึ้นอยู่กับปัจจัยหลายประการเช่นการจัดเก็บข้อมูลที่ต้องการประสิทธิภาพของการนำไปใช้) และวิธีการ krylov ใด ๆ (เช่น GMRES) นั้นดีถ้าคุณใช้การปรับสภาพล่วงหน้าที่เหมาะสม (ในทางปฏิบัติ) หากคุณไม่ได้ใช้การปรับสภาพล่วงหน้าใด ๆ วิธีการ krylov นั้นไม่ได้ใช้โดยทั่วไป ฉันทำงานกับ block sparse matrices (สิ่งเหล่านี้มาจากแอพพลิเคชั่น PDE) และสังเกตว่า block preconditioned (ทับซ้อนเพิ่ม schwarz) krylov solver (ทั้งรีสตาร์ท GMRES หรือ BiCG-Stab) ควบคู่กับการแก้ไขกริดหยาบ (หรือ multigrid) ประเภทของเมทริกซ์


2

ผู้ประกอบการ Matlab '\' มีประสิทธิภาพสูงเนื่องจากการเขียนโปรแกรมบากด้านบน คุณอาจเห็นแนวคิดและวิธีการใช้ทางลัดทั้งหมดที่เป็นไปได้ในหนังสือของทิโมธีเดวิส

ใน matlab คุณสามารถใช้ gmres ซึ่งได้รับการพัฒนาและมีเสถียรภาพ อาจเป็น minres ซึ่งในทางทฤษฎีควรจะเหมาะสำหรับกรณีของคุณอาจไม่น่าเชื่อถือ (อย่างน้อยประสบการณ์ของฉันพูดอย่างนั้น) คุณควรได้รับประสิทธิภาพเทียบเท่าหรือสูงกว่าจาก matlab gmres ถ้า

  1. ระบบของคุณมีขนาดใหญ่พอ (อย่างน้อยสองสามพันสองสามพัน)
  2. หากคุณกำลังใช้พารามิเตอร์ที่เหมาะสม (RESTART, MAXIT, X0) ไม่มีแนวทางที่ชัดเจนสำหรับสิ่งนี้ ใช้ประสบการณ์ของคุณ
  3. ใช้ปัจจัยพื้นฐานที่ดี คุณอาจใช้ ILU หรือถูกกว่าบล็อก Jacobi นี้จะลดความพยายามอย่างมาก
  4. สิ่งสำคัญที่สุด: ถ้าเมทริกซ์ของคุณเบาบางใช้รูปแบบเบาบาง matlab Matlab gmres นั้นถูกสร้างมาอย่างดีเยี่ยม มันจะลดค่าใช้จ่ายในระดับใหญ่

สำหรับระบบที่ใหญ่ขึ้นใช้เครื่องมือเช่น PETSc


1

หากเมทริกซ์ของคุณมีมิติในช่วงกลางหมื่นหรือน้อยกว่าให้ใช้วิธีการโดยตรงแม้ว่าจะมีวิธีการโดยตรงไม่มากสำหรับระบบสมมาตรแบบไม่ จำกัด (จริง ๆ แล้วไม่มีสิ่งใดที่ฉันรู้ว่าเป็นโอเพนซอร์ส) มีMA57จาก HSL แต่ไม่มีค่าใช้จ่ายสำหรับการใช้เพื่อการศึกษาเท่านั้น คุณสามารถเพิกเฉยต่อความสมมาตรและใช้UMFPACKได้

ที่ขนาดต่ำนับร้อยนับร้อยการใช้หน่วยความจำของวิธีการโดยตรงเริ่มเกินกว่าสิ่งที่คอมพิวเตอร์ตั้งโต๊ะทั่วไปสามารถจัดการได้อย่างมีเหตุผลดังนั้นถ้าคุณไม่มีเครื่องหน่วยความจำที่ใช้ร่วมกันอ้วนคุณจะต้องย้ายไปที่วิธีการทำซ้ำ สำหรับปัญหาที่ไม่ จำกัด คุณสามารถชำนาญ BiCG (การไล่ระดับสี biconjugate) สำหรับระบบสมมาตรแม้ว่าการสลายเป็นไปได้ มีMINRES-QLP ที่เพิ่งเปิดตัวเมื่อเร็ว ๆ นี้สำหรับระบบสมมาตรซึ่งให้ความเสถียรของตัวเลขมากกว่า

ทั้งสองวิธีต้องการการใช้งานที่แตกต่างกันเนื่องจากวิธีการโดยตรงที่คุณต้องการในรูปแบบเมทริกซ์ในขณะที่ในวิธีการวนซ้ำคุณมักจะไม่ก่อให้เกิดเมทริกซ์อย่างชัดเจน

มีเหตุผลหลายประการที่ทำไมวิธีการหนึ่งอาจเร็วกว่าอีกวิธีหนึ่งโดยเฉพาะอย่างยิ่งในฐานะฟังก์ชันของส่วนข้อมูลเมทริกซ์ สำหรับระบบที่มีอุณหภูมิสูงวิธีการวนซ้ำอาจทำให้ค่อนข้างแย่ สำหรับเมทริกซ์ที่ไม่กระจัดกระจายวิธีการลงเอยจะสร้างการเติมข้อมูลจำนวนมากซึ่งทำให้ช้าลงมาก นอกจากนี้วิธีการโดยตรงใน Matlab นั้นได้รับการปรับให้เหมาะสมที่สุด (ใช้ UMFPACK หรือ MA57 ภายใน) ในขณะที่วิธีการวนซ้ำมักจะถูกเข้ารหัสโดยตรงใน Matlab และมีโอกาสน้อยกว่าในการใช้ประโยชน์จากระดับ 3 BLAS เนื่องจากคอขวดเป็นแอพพลิเคชั่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.