การแก้ระบบ Ax = b อย่างง่ายควบคู่ไปกับ PETSc


10

ฉันยังใหม่กับแพ็คเกจ PETSc

ฉันมีเมทริกซ์ ~ 4000x4000 A ในรูปแบบเมทริกซ์ตลาดและฉันต้องการให้ PETSc แก้ปัญหานี้โดยใช้โปรเซสเซอร์หลายตัว

ฉันรู้วิธีแก้ปัญหาระบบในโปรเซสเซอร์เดียว แต่ฉันไม่ทราบวิธีการกระจายเมทริกซ์และเวกเตอร์ระหว่างโปรเซสเซอร์ที่แตกต่างกัน

มีคำแนะนำง่ายๆในการทำเช่นนี้หรือไม่?

คำตอบ:


14

ตลาด Matrix เป็นรูปแบบที่แย่มากสำหรับการอ่านแบบขนานดังนั้นจึงเป็นการดีกว่าที่จะประมวลผลล่วงหน้าเป็นรูปแบบขนานที่ดีกว่า ขนาดเมทริกซ์ของคุณมีขนาดเล็กมากเพื่อให้ประสิทธิภาพการทำงานที่ไม่เป็นปัญหา แต่สิ่งที่ง่ายที่สุดและทั่วไปมากที่สุดคือการใช้งูหลามหรือ Matlab / คู่ที่จะเขียนไฟล์ตลาดเมทริกซ์ในรูปแบบไบนารี PETSc MatLoad()ซึ่งสามารถอ่านได้อย่างมีประสิทธิภาพในแบบคู่ขนานโดยใช้ ตัวอย่างเช่นคุณสามารถใช้รหัส Python นี้สำหรับการประมวลผลล่วงหน้า (เพิ่ม$PETSC_DIR/bin/pythonscriptsในของคุณPYTHONPATH)

import scipy.io, PetscBinaryIO
A = scipy.io.mmread('thematrix.mtx')
PetscBinaryIO.PetscBinaryIO().writeMatSciPy(open('petscmatrix','w'), A)

คุณยังสามารถเขียนเวกเตอร์ไปยังไฟล์ได้ในเวลานี้ หากคุณต้องการอ่านและแก้ไขระบบคุณสามารถใช้src/ksp/ksp/examples/tutorials/ex10.c(พร้อมตัวเลือก-f petscmatrixในการอ่านไฟล์ไบนารีที่คุณเพิ่งเขียน)

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

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