LAPACK แก้ปัญหาระบบไตรภาคีได้อย่างไรและเพราะเหตุใด


9

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

ทีนี้ภายใน Lapack ดูเหมือนว่ามันจะแก้ปัญหาโดยการแยกตัวประกอบ LU และฉันสงสัยว่าทำไมมันไม่ซับซ้อนกว่าที่ควรจะเป็น?

นอกจากนี้ฉันพบอัลกอริทึมในหนังสือ "Numerical Recipes" จาก nr.com ซึ่งแบ่งระบบซ้ำ ๆ เป็นปัญหาเล็ก ๆ น้อย ๆ มันดูมีแนวโน้ม มีสารพัดอื่น ๆ อีกไหม?

อัปเดต: ขนาดปัญหาประมาณ 1,000x1000 ฉันใช้ GotoBLAS มันให้ไลบรารี่ 3.1.1 กับไลบรารี่เช่นกัน ปัญหาไม่สมมาตร ฉันใช้ชุดคำสั่ง Lapack สำหรับเมทริกซ์สามเหลี่ยมทั่วไป


2
คุณจะต้องระบุ LAPACK กิจวัตรที่คุณใช้ในการนี้ โปรดทราบว่าdgtsvดำเนินการหมุนเหวี่ยงบางส่วน แต่รหัสของคุณอาจไม่ทำเช่นนี้ โปรดระบุว่าการติดตั้ง LAPACK แบบใดที่คุณทดสอบด้วยและขนาดของปัญหาที่คุณเปรียบเทียบด้วย นอกจากนี้ปัญหาของคุณคือสมการบวกแน่นอนหรือไม่
Jed Brown

ฉันเพิ่มข้อมูลบางอย่างในการกำหนดคำถาม
tiam

แอปพลิเคชันของคุณเกี่ยวข้องกับวิธีการปริมาณ จำกัด หรือไม่
สอบถาม

มันเป็นความแตกต่างอัน จำกัด แต่ในมุมมองนี้ฉันคิดว่าเหมือนกันมากหรือน้อย
tiam

คำตอบ:


7

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

หากคุณจะแก้ปัญหากับเมทริกซ์เดียวกันหลายครั้งคุณอาจต้องการที่จะเก็บปัจจัยโดยใช้dgttrfและdgttrs เป็นไปได้ว่าการใช้งานใน LAPACK ที่ปรับให้เหมาะสมเช่น MKL, ACML หรือ ESSL จะมีประสิทธิภาพมากกว่า


ฉันอยากรู้อยากเห็นเล็กน้อย Gaussian Elim พร้อม PP จะทำงานกับเมทริกซ์ทั้งหมดรวมถึง TriDiagonal ใน CFD เราจะใช้วิธีการพิเศษสำหรับกรณี FVM 1D เรียกTDMA สิ่งใดที่คุณคิดว่าจะเร็วกว่าสำหรับกรณีที่เขากำลังพูดถึง? แม้ว่าฉันไม่แน่ใจว่าการฝึกอบรมของเขามีความโดดเด่นในแนวทแยงมุม
สอบถาม

TDMA เป็นสิ่งที่ฉันใช้ในรหัสของฉัน คำถามคือทำไม Lapack ที่เร็วที่สุดจะใช้ขั้นตอนการหมุนที่เป็นบางส่วนในเมทริกซ์เฉพาะซึ่งแก้ไขได้เร็วขึ้นด้วยวิธีง่าย ๆ เช่น TDMA
tiam

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

ฉันเห็นสิ่งที่คุณหมายถึงฉันได้รับประโยชน์จากความรู้ของฉันเกี่ยวกับระบบที่ฉันกำลังแก้ไข การใช้งานอื่น ๆ ของ LAPACK ให้ประสิทธิภาพที่เพิ่มขึ้นเนื่องจากการปรับให้เข้ากับสถาปัตยกรรมที่เฉพาะเจาะจงหรือมันไปไกลกว่านั้น?
tiam
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.