Petsc4py กับ c / c ++ / fortran ช้าเท่าไหร่?
ฉันรู้ว่ามันจะขึ้นอยู่กับรหัสที่ถูกเรียกใช้ แต่สิ่งที่เกี่ยวกับสิ่งที่ง่ายเช่นผลิตภัณฑ์ matrix-vector?
Petsc4py กับ c / c ++ / fortran ช้าเท่าไหร่?
ฉันรู้ว่ามันจะขึ้นอยู่กับรหัสที่ถูกเรียกใช้ แต่สิ่งที่เกี่ยวกับสิ่งที่ง่ายเช่นผลิตภัณฑ์ matrix-vector?
คำตอบ:
นี่เป็นข้อกังวลอย่างกว้างขวางในชุมชนการเขียนโปรแกรมทางวิทยาศาสตร์และฉันจะพิจารณาความไม่แน่นอนของประสิทธิภาพในการเป็นหนึ่งใน "ตำนาน" ที่สำคัญในวิทยาศาสตร์การคำนวณ
ดังที่@fcruzพูดถึงpetsc4py
เป็น wrapper ของไลบรารี PETSc ไม่ใช่การนำ PETSc มาใช้ใน Python ดังนั้นคุณสามารถคาดหวังว่าการลงโทษประสิทธิภาพจะมาจากการคัดลอกอาร์เรย์ไปยังและจาก PETSc หรือจากค่าใช้จ่ายในการเรียกรหัสไดรเวอร์ / ฟังก์ชั่นของคุณ petsc4py
มีการดำเนินการอย่างระมัดระวังและตราบใดที่คุณเข้าใจnumpy
อินเทอร์เฟซอาร์เรย์หลายมิติคุณสามารถหลีกเลี่ยงการคัดลอกค่าใช้จ่าย สำหรับกรณีการใช้งานส่วนใหญ่ที่ฉันทำงานอยู่นั้นโทษประสิทธิภาพในการทำงานใน Python อยู่ที่ประมาณ 10-40% และฉันมักจะได้รับอย่างมากในรูปแบบอื่น ๆ ที่มากกว่าการชดเชยประสิทธิภาพการทำงานนี้ ในความเป็นจริงนักพัฒนา HPC Python ที่มีประสบการณ์หลายคนที่ฉันได้พูดคุยด้วยเห็นว่าความแตกต่างของประสิทธิภาพการทำงานนี้สามารถลดลงได้มากขึ้นและเมื่อ Python กำลังขับรหัสที่มีราคาแพง
petsc4py
พื้นที่เก็บข้อมูลตัวเองมีจำนวนตัวอย่างที่มีประโยชน์เพื่อแสดงให้เห็นประสิทธิภาพ / ความยืดหยุ่นในการถ่วงดุลอำนาจ ค้นหาในpetsc4py
แหล่งเก็บข้อมูลต้นฉบับสำหรับการสาธิตที่เรียกว่าperftest
ซึ่งแก้ไขระบบสมการไม่เชิงเส้นโดยใช้ทั้งไดรเวอร์ Python และไดรเวอร์ C (เหนือเคอร์เนล Fortran ที่มีให้ในApp.f90
ไดเรกทอรีนั้น) ค่าใช้จ่ายด้านประสิทธิภาพที่นี่อยู่ที่ 10%
เป็นตัวอย่างที่เป็นรูปธรรมฉันเป็นส่วนหนึ่งของทีมนักวิทยาศาสตร์ที่ทำงานกับPyClawซึ่งเป็นชุดซอฟต์แวร์ที่เชื่อมต่อกับ PETSc สำหรับการจัดการกริดแบบขนานและเมล็ด Fortran แบบดั้งเดิมสำหรับการแก้ปัญหา Riemann บนอินเตอร์เฟสของเซลล์ เราดำเนินการศึกษาอย่างรอบคอบเป็นธรรมของการเสื่อมประสิทธิภาพจากการเปลี่ยนไปจากคนขับ Fortran และคุณสามารถเห็นผลลัพธ์ในด้านล่างของหน้า 5 ในตารางที่ 1 ในกระดาษประชุม ในกรณีของเราเราทำการแลกเปลี่ยนประสิทธิภาพแบบ on-core เล็กน้อยเพื่อความสามารถในการเชื่อมต่อโค้ดของเรากับ PETSc และ Fortran และทำงานได้อย่างมีประสิทธิภาพในแบบคู่ขนานกับแกนหลักหมื่น
App.f90
แหล่งที่มาperftest
) ไม่มีความแตกต่างของประสิทธิภาพใน I / O คุณดูFEniCSสำหรับแพ็คเกจระดับสูงกว่านี้หรือไม่?
Petsc4py เป็นอีกวิธีหนึ่งในการยอมรับ PETSc แต่จาก pythonหรือเหมือนกับที่กล่าวไว้ว่า Petsc4py ให้การเชื่อมเพื่อให้จาก python คุณสามารถเข้าถึงโครงสร้างข้อมูลและรูทีนของ PETSc และลดความพยายามในการพัฒนา PDE แบบขนาน (ขนาดนั้น)
PETSc ให้ abstractions หลายระดับแก่นักแก้ปัญหาของพวกเขาและคุณยังสามารถใช้ PETSc เพื่อสร้างตัวแก้ปัญหาของคุณเอง ในระดับต่ำสุดของซอฟต์แวร์ที่เป็นนามธรรม PETSc ใช้ BLAS, LAPACK และ MPI และที่ดีที่สุดมันจะเร็วพอ ๆ กับการใช้งานเหล่านี้
ตอนนี้ Pets4py ใช้ cython เพื่อสร้างการเชื่อมโยงกับ PETSc ค่าใช้จ่ายในการใช้ cython นั้นสัมพันธ์กับการคำนวณจำนวนมากที่ทำจาก PETSc หากคุณใช้ตัวแก้ PDE ระดับสูงจาก PETSc ค่าโสหุ้ยควรจะเล็กพอที่คุณไม่จำเป็นต้องกังวล
คำถามที่สำคัญกว่าการเปรียบเทียบประสิทธิภาพของ PETSc กับ GEMV คือถ้า PETSc เป็นเครื่องมือที่เหมาะสมสำหรับงานของคุณ หากคุณจำเป็นต้องใช้ตัวแก้ PDE แบบขนานที่ไม่น่าสนใจนั่นก็คือ PETSc จะช่วยคุณ อย่างไรก็ตามถ้าคุณต้องการทำ GEMV คุณต้องการไลบรารี BLAS โชคดี!