ให้ฉันลองและทำลายความต้องการของคุณ:
- การบำรุงรักษา
- การอ่าน / เขียนข้อมูลข้อความ
- อินเทอร์เฟซ / ความสามารถที่แข็งแกร่งสำหรับ LU factorizations
- ตัวแก้เชิงเส้นเบาบาง
- ประสิทธิภาพและความยืดหยุ่นในการจัดเก็บข้อมูลขนาดใหญ่
จากรายการนี้ฉันจะพิจารณาภาษาต่อไปนี้:
C, C ++, Fortran, Python, MATLAB, Java
จูเลียเป็นภาษาใหม่ที่มีแนวโน้ม แต่ชุมชนยังคงมีอยู่รอบตัวมันและมันไม่ได้ถูกปรับใช้ในรหัสใหม่ที่สำคัญ
การอ่าน / เขียนข้อมูลข้อความ
ง่ายต่อการเข้าใจในการเขียนโปรแกรมภาษาใด ๆ ตรวจสอบให้แน่ใจว่าคุณได้บัฟเฟอร์อย่างเหมาะสมและรวมการเข้าถึง I / O ของคุณและคุณจะได้รับประสิทธิภาพที่ดีจากภาษาใด ๆ ที่คุณควรพิจารณา หลีกเลี่ยงวัตถุสตรีมใน C ++ เว้นแต่คุณจะรู้วิธีใช้วัตถุเหล่านั้นอย่างมีประสิทธิภาพ
อินเทอร์เฟซ / ความสามารถที่แข็งแกร่งสำหรับ LU factorizations
หากคุณกำลังดำเนินการกับปัจจัยที่หนาแน่นของ LU คุณจะต้องใช้ LAPACK หรือ ScaLAPACK / Elemental สำหรับการทำงานแบบขนาน LAPACK และ ScaLAPACK ถูกเขียนใน Fortran ส่วน Elemental นั้นเขียนด้วย C ++ ทั้งสามไลบรารีนั้นมีประสิทธิภาพและได้รับการสนับสนุนและจัดทำเป็นเอกสาร คุณสามารถอินเทอร์เฟซเหล่านั้นจากภาษาใด ๆ ที่คุณควรพิจารณา
ตัวแก้เชิงเส้นเบาบาง
เครื่องมือแก้ปัญหาเชิงเส้นแบบกระจายขนาดใหญ่ที่ใช้งานได้ฟรีมีอยู่เกือบทั้งหมดผ่านPETScซึ่งเขียนใน C ซึ่งได้รับการบันทึกและสนับสนุนอย่างดี คุณสามารถเชื่อมต่อกับ PETSc จากภาษาใดก็ได้ที่คุณควรพิจารณา
ประสิทธิภาพและความยืดหยุ่นในการจัดเก็บข้อมูลขนาดใหญ่
กระบวนทัศน์การเขียนโปรแกรมแบบขนานเพียงอย่างเดียวที่คุณกล่าวถึงนั้นใช้หน่วยความจำแบบแบ่งใช้ซึ่งหมายความว่าคุณไม่ได้พิจารณาวิธีการคำนวณแบบกระจายหน่วยความจำแบบอิง MPI แบบกระจายข้อความ จากประสบการณ์ของฉันมันง่ายกว่ามากในการเขียนโค้ดที่ขยายได้มากกว่าหนึ่งโหลแกนโดยใช้โซลูชันหน่วยความจำแบบกระจาย เกือบทุกวันนี้ "กลุ่ม" ของมหาวิทยาลัยนั้นใช้ MPI-based เครื่องหน่วยความจำที่ใช้ร่วมกันขนาดใหญ่นั้นมีราคาแพงและหายากตามลำดับ คุณควรพิจารณา MPI สำหรับแนวทางของคุณ แต่คำแนะนำของฉันจะนำไปใช้โดยไม่คำนึงถึงกระบวนทัศน์การเขียนโปรแกรมที่คุณเลือก
เกี่ยวกับประสิทธิภาพการทำงานของโหนดถ้าคุณกำลังเขียนรูทีนเชิงตัวเลขด้วยตัวเองมันเป็นวิธีที่ง่ายที่สุดในการรับประสิทธิภาพที่ดีใน Fortran หากคุณมีประสบการณ์เล็กน้อยใน C, C ++ หรือ Python คุณสามารถรับประสิทธิภาพที่เทียบเคียงได้ (C และ C ++ นั้นตายไปแล้วแม้กับ Fortran, Python และ MATLAB จะใช้เวลาประมาณ 25% โดยไม่ต้องใช้ความพยายามมาก) MATLAB ทำสิ่งนี้ผ่านคอมไพเลอร์ JIT และนิพจน์เชิงพีชคณิตเชิงเส้นที่ดีมาก คุณอาจจะต้องใช้ Cython, numpy, numexpr หรือฝังเมล็ดตัวเลขเพื่อรับประสิทธิภาพที่อ้างจาก Python ฉันไม่สามารถแสดงความคิดเห็นเกี่ยวกับประสิทธิภาพของ Java เพราะฉันไม่รู้ภาษาดีนัก แต่ฉันคิดว่ามันไม่ไกลจาก Python ถ้าเขียนโดยผู้เชี่ยวชาญ
หมายเหตุเกี่ยวกับอินเตอร์เฟส
ฉันหวังว่าฉันจะเชื่อมั่นว่าคุณจะสามารถทำทุกสิ่งที่คุณต้องการในภาษาการเขียนโปรแกรมที่คุณกำลังพิจารณา หากคุณกำลังใช้ Java อินเตอร์เฟส C จะมีความท้าทายเล็กน้อย Python มีการรองรับอินเตอร์เฟส C และ Fortran ที่ยอดเยี่ยมผ่าน ctypes, Cython และ f2py LAPACK ได้รับการห่อแล้วและมีให้ผ่าน scipy MATLAB มีฟังก์ชั่นทั้งหมดที่คุณต้องการในไลบรารี่เนทีฟ แต่ไม่สามารถปรับขนาดได้หรือง่ายต่อการทำงานบนคลัสเตอร์ Java สามารถรองรับอินเตอร์เฟส C และ Fortran ด้วยJNIแต่ไม่พบในคลัสเตอร์และซอฟต์แวร์แบบขนานสำหรับการคำนวณทางวิทยาศาสตร์
การบำรุงรักษา
สิ่งเหล่านี้จะเกิดขึ้นกับรสนิยมส่วนตัว แต่ข้อตกลงทั่วไปเกี่ยวกับการบำรุงรักษาคือคุณต้องการลดจำนวนบรรทัดของรหัสในซอฟต์แวร์ของคุณเขียนโค้ดแบบแยกส่วนที่มีอินเตอร์เฟสที่กำหนดไว้อย่างดีและสำหรับซอฟต์แวร์การคำนวณ การทดสอบที่ตรวจสอบความถูกต้องและฟังก์ชั่นการใช้งาน
คำแนะนำ
ฉันเองโชคดีมากกับงูหลามและฉันขอแนะนำสำหรับโครงการการคำนวณมากมาย ฉันคิดว่าคุณควรพิจารณาอย่างยิ่งสำหรับโครงการของคุณ Python และ MATLAB น่าจะเป็นภาษาที่แสดงออกมากที่สุดสำหรับการคำนวณทางวิทยาศาสตร์ คุณสามารถอินเทอร์เฟซ Python กับภาษาการเขียนโปรแกรมอื่น ๆ ได้อย่างง่ายดายคุณสามารถใช้ f2py เพื่อตัดการใช้งาน Fortran ในปัจจุบันของคุณและเขียนทีละชิ้นทีละชิ้นตามที่คุณต้องการใน Python ในขณะที่ตรวจสอบว่าคุณยังคงใช้งานได้ ในเวลานี้ผมจะแนะนำให้รวมกันของอย่างเป็นทางการหลาม 2.7 การดำเนินการกับSciPy คุณสามารถเริ่มต้นได้อย่างง่ายดายมากกับสแต็คนี้จากที่มีอยู่ได้อย่างอิสระจัดจำหน่าย Enthought หลาม
คุณสามารถทำสิ่งนี้ได้ใน C, C ++ หรือ Fortran C และ C ++ เป็นภาษาที่ดึงดูดใจมากสำหรับนักพัฒนามืออาชีพที่มีประสบการณ์มากมาย แต่บ่อยครั้งที่จะเดินทางไปหานักพัฒนาใหม่และในแง่นี้อาจไม่ใช่ความคิดที่ดีสำหรับรหัสทางวิชาการที่มากขึ้น Fortran และ MATLAB ได้รับความนิยมในการคำนวณเชิงวิชาการ แต่มีความอ่อนแอในโครงสร้างข้อมูลขั้นสูงและการแสดงออกที่ Python เสนอ (คิดว่าเป็นออบเจ็กต์ Python dict)
คำถามที่เกี่ยวข้อง: