Python กับ FORTRAN


17

อันไหนดีกว่า: FORTRAN หรือ Python และฉันเดาว่าในทั้งสองกรณีคุณต้องการ Gnuplot ฉันพูดถูกมั้ย

ฉันกำลังทำงานกับเครื่อง Windows ในขณะนี้

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

ฉันเห็นหลักสูตรเกี่ยวกับฟิสิกส์เชิงคำนวณซึ่งแนะนำทั้ง FORTRAN (77 ฉันเชื่อ) และ Python ฉันวางแผนที่จะเริ่มต้นด้วยสิ่งใดสิ่งหนึ่งและจากนั้นเรียนรู้สิ่งอื่น แต่ฉันไม่รู้ว่าการเปลี่ยนแปลงใดอาจเป็นวิธีที่ง่ายที่สุด

คุณต้องการแนะนำคอมไพเลอร์ใดด้วย?

คำถามพื้นฐานสำหรับฉันมาถึง: สิ่งที่ง่ายที่สุดในการเรียนรู้ซึ่งเป็นคำถามที่เร็วที่สุดซึ่งเป็นคำถามที่ใช้ง่ายที่สุดและเหนือกว่าคำถามใดที่ใช้มากที่สุด (เพื่อเปรียบเทียบ 4 ข้อนี้) และถัดจากนั้นคอมไพเลอร์ที่ใช้บ่อยที่สุด (ฟรีหรือมีค่าใช้จ่าย) ใช้งานอะไร? ฉันกำลังพิจารณาที่จะแปลงแล็ปท็อปเครื่องเก่า (Intel dual core รุ่นแรก) เป็น Linux หวังว่าจะเร็วพอ

ขอบคุณมากสำหรับคำตอบจนถึงตอนนี้! คำตอบที่สอดคล้องกับสิ่งที่ฉันกำลังค้นหาคือคำตอบของ LKlevin และ SAAD

ฉันรู้พื้นฐานของ C ++, Maple และฉันเป็นอาจารย์ MATLAB และ Mathematica9 เกือบจะสมบูรณ์ถ้ามันช่วยได้


12
คุณต้องเจาะจงมากขึ้น นี่ก็เหมือนกับการถามว่า "ไหนดีกว่า: ค้อนหรือไขควง" ลองดูที่scicomp.stackexchange.com/questions/11006 (ประมาณ C ++ แทน Fortran แต่คะแนนส่วนใหญ่ควรใช้เท่า ๆ กัน)
Christian Clason

@ChristianClason จุดยุติธรรม: p
Nick

ขอบคุณสำหรับการแก้ไขของคุณแม้ว่าสิ่งนี้จะไม่ทำให้สิ่งต่าง ๆ แคบลง ฉันไม่แน่ใจว่าจะสามารถพูดอะไรได้มากกว่าคำตอบสำหรับคำถามที่ลิงก์ด้านบน
Christian Clason

2
นอกจากนี้คำถามเกี่ยวกับคอมไพเลอร์เป็นปัญหาแยกต่างหากและควรเป็นคำถามแยกต่างหาก (มิฉะนั้นคนที่คุ้นเคยกับ Fortran แต่ไม่สนใจในหลามจะไม่เห็นมัน.) บางคำแนะนำจะได้รับอยู่แล้วในscicomp.stackexchange.com/questions/8617
Christian Clason

1
หากคุณรู้จัก matlab คุณสามารถเรียนรู้อัลกอริธึมเชิงตัวเลขส่วนใหญ่ได้โดยการนำไปใช้ที่นั่นแม้ว่าประสิทธิภาพของคุณจะแย่กว่าการใช้ MATLAB จากตรงนั้นคุณสามารถตัดสินใจได้ว่าความต้องการด้านประสิทธิภาพของคุณคืออะไรและย้ายไปที่ห้องสมุด / ภาษาที่มีประสิทธิภาพมากขึ้น
Godric Seer

คำตอบ:


29

ความง่ายในการเรียนรู้

Python และ Fortran เป็นทั้งภาษาที่เรียนรู้ได้ง่าย อาจเป็นเรื่องง่ายที่จะหาสื่อการเรียนรู้ Python ที่ดีกว่าวัสดุการเรียนรู้ Fortran ที่ดีเพราะ Python มีการใช้กันอย่างแพร่หลายมากขึ้นและในปัจจุบัน Fortran ถือเป็นภาษา "พิเศษ" สำหรับการคำนวณเชิงตัวเลข

ฉันเชื่อว่าการเปลี่ยนจาก Python เป็น Fortran จะง่ายขึ้น Python เป็นภาษาที่ถูกตีความดังนั้นจำนวนขั้นตอนที่ใช้ในการทำให้โปรแกรมแรกของคุณทำงานมีขนาดเล็กลง (เปิดตัวแปลให้พิมพ์print("Hello, world!")ที่พรอมต์) มากกว่าที่ใช้สำหรับ Fortran (เขียนโปรแกรม "Hello world" คอมไพล์รัน) ฉันคิดว่ามีวัสดุที่ดีกว่าในการสอนสไตล์เชิงวัตถุใน Python มากกว่าใน Fortran และมีรหัส Python สำหรับ GitHub มากกว่ารหัส Fortran

เริ่มต้นใช้งาน Windows

การติดตั้ง Python จะทำให้เจ็บปวดน้อยลง มีการแจกแจงของ Windows ที่มีอยู่ ฉันแนะนำให้ใช้การกระจายทางวิทยาศาสตร์เช่น Anaconda หรือ Enthought Canopy ไม่มีคอมไพเลอร์จริงๆ ล่ามใช้บทบาทนั้น คุณจะต้องการใช้ล่ามที่ใช้ CPython เนื่องจากมีไลบรารีที่เป็นตัวเลขมากกว่าและมันทำงานร่วมกับ C, C ++ และ Fortran ได้อย่างดี การใช้งานล่ามอื่น ๆ ได้แก่ Jython และ PyPy

บนเครื่อง Windows การติดตั้งคอมไพเลอร์ Fortran จะน่ารำคาญ คอมไพเลอร์บรรทัดคำสั่งโดยทั่วไปคือโปรแกรมเช่น gfortran, ifort (จาก Intel; ฟรีสำหรับการใช้งานส่วนตัว, ค่าใช้จ่ายเป็นอย่างอื่น) และ pgfortran (จาก PGI; รุ่นทดลองใช้ฟรีหรือค่าใช้จ่ายเงิน) ในการติดตั้งคอมไพเลอร์เหล่านี้คุณอาจต้องติดตั้งเลเยอร์ความเข้ากันได้ประเภท UNIX / POSIX บางประเภทเช่น Cygwin หรือ MinGW ฉันพบว่ามันเจ็บปวดที่จะทำงานด้วย แต่บางคนชอบเวิร์กโฟลว์นั้น คุณสามารถติดตั้งคอมไพเลอร์ด้วย GUI เช่น Visual Fortran (อีกครั้งคุณต้องจ่ายค่าลิขสิทธิ์)

บน Linux จะเป็นการง่ายกว่าในการติดตั้ง Python และคอมไพเลอร์ ฉันยังคงติดตั้งอนาคอนดาหรือเอนเทิร์นซี Canopy เป็นการแจกจ่ายแบบ Python

ความเร็ว: ผลผลิตเทียบกับการแลกเปลี่ยนประสิทธิภาพ

ในการใช้ Python (หรือ MATLAB, Mathematica, Maple หรือภาษาที่ตีความใด ๆ ) คุณจะต้องสละประสิทธิภาพในการทำงาน เมื่อเทียบกับ Fortran (หรือ C ++, C หรือภาษาที่รวบรวมอื่น ๆ ) คุณจะเขียนโค้ดน้อยลงเพื่อให้งานเดียวกันสำเร็จซึ่งโดยทั่วไปจะใช้เวลาน้อยกว่าในการหาวิธีการทำงาน

การปรับประสิทธิภาพที่มีประสิทธิภาพสำหรับการใช้งาน Python นั้นแตกต่างกันไปและได้รับการผ่อนปรนจากการมอบหมายงานที่ต้องใช้ความชำนาญในการคำนวณเพื่อรวบรวมภาษา MATLAB ทำสิ่งที่คล้ายกัน เมื่อคุณทำการคูณเมทริกซ์ใน MATLAB มันจะเรียกว่า BLAS การลงโทษประสิทธิภาพนั้นแทบเป็นศูนย์และคุณไม่จำเป็นต้องเขียน Fortran, C หรือ C ++ ใด ๆ เพื่อให้ได้ประสิทธิภาพสูง มีสถานการณ์คล้ายกันใน Python หากคุณสามารถใช้ไลบรารี (ตัวอย่างเช่น NumPy, SciPy, Petsc4py, dolfin จาก FEniCS, PyClaw) คุณสามารถเขียนรหัสทั้งหมดของคุณใน Python และรับประสิทธิภาพที่ดี (อาจจะโทษ 10-40%) เนื่องจากการคำนวณทั้งหมด ส่วนที่เข้มข้นคือการเรียกไปยังไลบรารีภาษาที่รวบรวมอย่างรวดเร็ว อย่างไรก็ตามหากคุณต้องเขียนทุกอย่างใน Python ล้วนๆการปรับค่าปรับจะเป็นปัจจัยที่ 100-1000x ดังนั้นหากคุณต้องการใช้ Python และต้องรวมแบบกำหนดเองไว้ด้วย รูทีนที่คำนวณอย่างเข้มข้นคุณควรเขียนส่วนนั้นในภาษาที่คอมไพล์เช่น C, C ++ หรือ Fortran แล้วห่อด้วยอินเตอร์เฟส Python มีห้องสมุดที่อำนวยความสะดวกในกระบวนการนี้ (เช่น Cython และ f2py) และแบบฝึกหัดที่จะช่วยคุณ โดยทั่วไปไม่เป็นภาระ

ขอบเขตการใช้งาน

Python ถูกใช้อย่างกว้างขวางมากขึ้นในฐานะภาษาที่ใช้งานทั่วไป Fortran นั้น จำกัด อยู่ที่การคำนวณเชิงตัวเลขและวิทยาศาสตร์และส่วนใหญ่จะแข่งขันกับ C และ C ++ สำหรับผู้ใช้ในโดเมนนั้น

ในวิทยาศาสตร์การคำนวณโดยทั่วไปแล้วงูใหญ่ไม่ได้แข่งขันโดยตรงกับภาษาที่รวบรวมเนื่องจากการลงโทษที่ฉันกล่าวถึง คุณจะใช้ Python สำหรับกรณีที่คุณต้องการผลิตภาพและประสิทธิภาพสูงเป็นข้อพิจารณารองเช่นในการสร้างต้นแบบอัลกอริธึมเชิงตัวเลขการประมวลผลข้อมูลและการสร้างภาพ คุณจะใช้ Fortran (หรือภาษาอื่นที่คอมไพล์) เมื่อคุณมีความคิดที่ดีว่าอัลกอริทึมและการออกแบบแอปพลิเคชันของคุณควรเป็นอย่างไรคุณยินดีที่จะใช้เวลาเขียนและดีบักโค้ดของคุณมากขึ้นและประสิทธิภาพเป็นสิ่งสำคัญยิ่ง (ตัวอย่างเช่นประสิทธิภาพเป็นขั้นตอนที่ จำกัด ในกระบวนการจำลองของคุณหรือเป็นคีย์ที่สามารถส่งได้ในการวิจัยของคุณ) กลยุทธ์ทั่วไปคือการผสม Python และภาษาที่คอมไพล์ (โดยทั่วไปคือ C หรือ C ++ แต่ Fortran ถูกใช้ด้วย) และใช้เฉพาะภาษาที่คอมไพล์สำหรับส่วนที่อ่อนไหวด้านประสิทธิภาพของโค้ด แน่นอนว่าค่าใช้จ่ายในการพัฒนานั้นยากที่จะเขียนและดีบักโปรแกรมในสองภาษามากกว่าโปรแกรมในภาษาเดียว

ในแง่ของการขนานมาตรฐาน MPI ปัจจุบัน (MPI-3) มีการเชื่อมแบบ Fortran และ C แบบดั้งเดิม มาตรฐาน MPI-2 มีการผูกมัด C ++ แบบดั้งเดิม แต่ MPI-3 ไม่มีและคุณต้องใช้การผูก C มีการผูก MPI ของบุคคลที่สามอยู่เช่น mpi4py ฉันใช้ mpi4py; มันใช้งานได้ดีและใช้งานได้ง่าย สำหรับการขนานขนาดใหญ่ (หมื่นคอร์) คุณอาจต้องการใช้ภาษาที่คอมไพล์เพราะสิ่งต่าง ๆ เช่นการโหลดโมดูล Python แบบไดนามิกจะกัดคุณในระดับตูดหากคุณทำแบบไร้เดียงสา มีวิธีแก้ไขปัญหาคอขวดดังที่แสดงโดยนักพัฒนา PyClaw แต่ก็ง่ายกว่าที่จะหลีกเลี่ยง

ความคิดเห็นส่วนตัว

ฉันมีประสบการณ์ราวหนึ่งทศวรรษใน Fortran 90/95 และฉันได้ตั้งโปรแกรมใน Fortran 2003 ด้วยฉันมีประสบการณ์ในการเขียนโปรแกรม Python ประมาณห้าปี ฉันใช้ Python มากกว่าที่ใช้ Fortran เพราะจริงๆแล้วฉันใช้ Python ในการทำมากกว่านี้ งานส่วนใหญ่ที่ฉันต้องทำไม่จำเป็นต้องใช้ทรัพยากรการประมวลผลที่ใหญ่มากและโดยทั่วไปแล้วก็ไม่คุ้มค่าที่จะต้องพัฒนาอีกครั้งในภาษาอื่นดังนั้น Python จึงใช้ได้ดีสำหรับการแก้ปัญหา ODE และ PDE หากฉันต้องการใช้ภาษาที่รวบรวมฉันจะใช้ C, C ++ หรือ Fortran ตามลำดับ

รหัส Fortran ส่วนใหญ่ที่ฉันเคยเห็นนั้นน่าเกลียดส่วนใหญ่เป็นเพราะชุมชนวิทยาศาสตร์การคำนวณส่วนใหญ่ดูเหมือนจะไม่รู้หรือไม่ชอบวิธีปฏิบัติที่ดีที่สุดที่วิศวกรซอฟต์แวร์ค้นพบในช่วง 30 ปีที่ผ่านมา หากต้องการปัญญา: ไม่มีกรอบการทดสอบหน่วยที่ดีใน Fortran (สิ่งที่ดีที่สุดที่ฉันเจอคือ FUnit โดย NASA และไม่ได้รับการบำรุงรักษาอีกต่อไป) มีกรอบการทดสอบหน่วย Python ที่ดีอยู่สองสามตัวเครื่องกำเนิดเอกสาร Python ที่ดีและตัวอย่างการปฏิบัติโปรแกรมที่ดี


คำตอบที่ดีมากและสมบูรณ์ :) ฉันได้ติดตั้ง Linux เมื่อวานนี้ซึ่งมีคอมไพเลอร์ไพ ธ อนอยู่แล้ว ตอนนี้ฉันสงสัยว่ามีวิธีง่ายๆในการแชร์ไฟล์ระหว่างเครื่อง Linux และ Windows ของฉันหรือไม่? ฉันสังเกตเห็นว่าเมื่อใดก็ตามที่ฉันใช้ไม้เพื่อถ่ายโอนข้อมูลทั้งเครื่อง Windows และ Linux จะไม่สนใจบางส่วนของ de stich (ซึ่งจัดรูปแบบในรูปแบบ NFTS)
Nick

และปัญหาล่าสุดของฉันได้รับการแก้ไข bij โดยใช้รูปแบบ FAT32 (จนถึงอย่างน้อยที่สุด)
Nick

หมายเหตุ: FAT32 มีขนาดไฟล์สูงสุดที่ จำกัด
meawoppl

@ Meawoppl มีวิธีที่สะดวกกว่าในการสลับไฟล์ระหว่าง Linux และ Windows หรือไม่? อาจจะเป็นดรอปบ็อกซ์ใช่ไหม นอกจากนี้ยังมีโซลูชันที่ใช้ฮาร์ดแวร์หรือไม่
Nick

เก็บไฟล์ของคุณภายใต้ 4GB: P จริง ๆ ฉันไม่รู้วิธีแก้ปัญหาที่ดี นอกจากนี้ยังมีความเสื่อมในรูปแบบชื่อไฟล์ ฉันจำได้ว่าการแบ่ง windows บางส่วนสนับสนุนครั้งเดียวด้วยการตั้งชื่อไฟล์ <3.txt ซึ่งทำให้หน้าเศร้ามาก การสนับสนุน NTFS ใน linux นั้นค่อนข้างดีในตอนนี้ แต่ก็ยังไม่หมดใน OSX ฉันคิดว่าเราน่าจะแก้ปัญหานี้ได้แล้ว
meawoppl

7

ฉันจะอยู่ห่างจาก Fortan หรือถ้าคุณต้องใช้เวอร์ชันใหม่ที่สมเหตุสมผล (2003 มากกว่า 77) ซอฟแวร์ฟิสิกส์จำนวนมาก (โดยเฉพาะการจำลอง Monte Carlo) เขียนใน Fortran เพียงเพราะโครงการเริ่มต้นขึ้นในยุค 80

ที่ถูกกล่าวว่างูหลามและ Fortran เป็นสองภาษาที่แตกต่างกันมากและสิ่งที่พวกเขาควรใช้สำหรับแตกต่างกันมาก Python อยู่ในระดับสูงและโดยทั่วไปจะไม่เร็วขนาดนั้น (เทียบกับ Fortran & C ++) เหตุผลที่ใช้บ่อยคือมันเร็วพอสำหรับทุกสิ่งและมีห้องสมุดที่ยอดเยี่ยม (ขับเคลื่อนด้วย Fortran) สำหรับสิ่งที่คุณต้องการทำ นอกจากนี้ยังมี Matplotlib ที่ยอดเยี่ยมสำหรับการวางแผน (ไม่จำเป็นต้องใช้ GNUplot) และคุณสามารถได้ประสิทธิภาพที่ดีโดยใช้สิ่งต่างๆเช่น Cython สำหรับการเขียนบิตราคาแพง มันจะไม่เร็วเท่า Fortran หรือ C ++ อย่างไรก็ตามและการขนานกันนั้นแย่มากทำให้ไม่เพียงพอสำหรับการคำนวณเชิงตัวเลขที่มีประสิทธิภาพสูง หากสิ่งที่คุณต้องการสามารถจัดการได้โดยโทรไปที่ Fortran หรือ C library

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

C ++ คือ (ในความเห็นต่ำต้อยของฉัน) สื่อที่มีความสุข ด้วยไลบรารีอย่าง Armadillo หรือ Eigen คุณสามารถหลีกเลี่ยงการเข้ารหัสในระดับสูงได้ในขณะที่รับประสิทธิภาพในระดับต่ำ

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

สำหรับ Fortran บน windows สิ่งต่าง ๆ ยากขึ้นเล็กน้อย ฉันอยากจะแนะนำให้เปลี่ยนเป็น linux และใช้คอมไพเลอร์ gfortran หรือ Intels ifort Ifort มีแนวโน้มที่จะเร็วขึ้นสำหรับรหัสตัวเลขในประสบการณ์ของฉัน แต่ฟรีสำหรับการใช้ที่ไม่ใช่เชิงพาณิชย์และไม่ใช่เชิงวิชาการเท่านั้น

สรุปโดยรวม: หากคุณไม่ต้องการเรียกใช้การจำลองแบบหนักจริง ๆ ไพ ธ อนเป็นตัวเลือกที่ง่ายกว่าและสนุกกับการทำงานมากขึ้น ควรเร็วพอสำหรับโครงการระดับนักเรียนส่วนใหญ่ หากคุณต้องการประสิทธิภาพที่ดีขึ้นให้เริ่มต้นด้วยการดูจำนวนห้องสมุดที่ถูกเขียนไปแล้วและปล่อยให้ภาษาของคุณตัดสินใจ ถ้าคุณต้องเขียนสิ่งต่าง ๆ ตั้งแต่ต้นใช้ C ++

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

ข้อจำกัดความรับผิดชอบ: ฉันเป็นนักฟิสิกส์ที่ใช้เวลากับรหัส Monte Carlo ตาม Fortran 77 และปัจจุบันใช้การประมวลผลข้อมูลของเขาใน Python


นักวิจัยได้ใช้ Python แบบคู่ขนานกับแกนหลักหมื่นหมื่นตัวที่มีประสิทธิภาพแบบขนานที่ดี (ตัวอย่างเช่น PyClaw ทำงานใน Shaheen ทั้งหมดซึ่งมี 65,000+ คอร์)
Geoff Oxberry

1
เป็นไปได้ แต่สำหรับความรู้ของฉันโดยการทำให้แน่ใจว่าส่วนที่ขนานนั้นเกิดขึ้นนอก CPython ซึ่งเป็นความพยายามอย่างมาก ส่วนคู่ขนานของ PyClaw (PETSc) นั้นเขียนด้วย C เช่นกัน อีกทางเลือกหนึ่งคือใช้งานอินสแตนซ์ของ CPython หลายอินสแตนซ์ แต่มันก็ไม่สำคัญ
LKlevin

แอปพลิเคชั่นแบบขนานส่วนใหญ่นั้นเป็นเรื่องไม่สำคัญ คุณเขียนว่า "[Python] parallelisation นั้นแย่มากทำให้ไม่เพียงพอสำหรับการคำนวณเชิงตัวเลขที่มีประสิทธิภาพสูง" ไม่มีใครเขียนโค้ดประสิทธิภาพสูงใน Pure Python เหตุผลสำหรับการตัดสินใจครั้งนี้ไม่มีส่วนเกี่ยวข้องกับความเท่าเทียมและไม่ทำให้การใช้ Python เป็นภาษาอินเตอร์เฟสในการคำนวณประสิทธิภาพสูงตราบใดที่มีการใช้อย่างเหมาะสม คำพูดของคุณเป็นคนฟางที่พูดถึงปัญหาของความเท่าเทียมประสิทธิภาพสูงและการตีความภาษา ไม่มีใครมีความสามารถที่จะออกแบบแอพพลิเคชั่นแบบนั้น
Geoff Oxberry

ฉันยอมรับว่า Python เป็นภาษาอินเทอร์เฟซที่ยอดเยี่ยมสำหรับเกือบทุกจุดประสงค์ แต่นั่นก็ห่างไกลจากคำถาม แอปพลิเคชั่นส่วนใหญ่นั้นเป็นเรื่องไม่สำคัญปัญหาของที่นี่คือทุกกรณีของการทำให้เป็นคู่ขนานรวมถึงแอพพลิเคชั่นที่ไม่สำคัญใน python สิ่งนี้อาจสร้างความรำคาญใจหากปัญหาของคุณได้รับการอธิบายอย่างดีในแง่ของการดำเนินการ Numpy หรือ Cython ไม่คุณจะไม่ใช้สิ่งนี้กับ 65000 คอร์หลัก แต่คุณอาจยอมรับประสิทธิภาพ 2x บน 100 คอร์
LKlevin

สิ่งที่ดีเกี่ยวกับ Fortran ก็คือนอกจาก MPI / OpenMP แล้วยังมี Co-arrays ที่ตอนนี้เป็นส่วนหนึ่งของมาตรฐาน เช่นดูjolts.stanford.edu/72/
stali

7

Python เป็นภาษาระดับสูงช้ามาก สำหรับการบีบตัวเลขอย่างรวดเร็วคุณจะต้องเขียนเมล็ดคำนวณหลักในภาษาระดับต่ำเช่น C / C ++ ซึ่งหมายความว่าตอนนี้คุณต้องเรียนรู้ไม่เพียงหนึ่ง แต่อย่างน้อยสองภาษา คุณจะต้องจัดการกับอาการปวดหัวเพิ่มเติมที่เกี่ยวข้องกับการแก้จุดบกพร่อง / การติดตั้ง / บำรุงรักษา ฯลฯ คนส่วนใหญ่ใช้ Python เป็นน้ำตาลประโยคเพื่อซ่อนการมาของ C / C ++

Modern Fortran (90 ขึ้นไป) เป็นทั้งระดับสูงและเร็วโดยมี MATLAB เกือบเหมือนไวยากรณ์ ดังนั้นคุณสามารถทำสิ่งต่าง ๆ เช่น:

k=k+matmul(transpose(B),matmul(D,B))*weight(i)*detj

หรือ

indx(:)=indxmap(indx(:),2)

หรือง่ายกว่า

indx=indxmap(indx,2)

เป็นต้น

บน Linux มีคอมไพเลอร์ Fortran ฟรีจำนวนหนึ่ง ฉันใช้

  1. GCC
  2. Solaris Studio
  3. Open64
  4. Intel (ไม่ใช่เพื่อการค้าเท่านั้น)

ฉันไม่ได้ใช้ Macs / OSX แต่มี PGI ฟรี

และโปรดอย่าใช้ FORTRAN 77 ไม่มีใครใช้มันเพื่อเขียนรหัสใหม่

ข้อจำกัดความรับผิดชอบ: ฉันดู Python เป็นการส่วนตัวในการเขียนรหัส FE ที่ไม่มีโครงสร้างเล็ก ๆ ของฉัน (สร้างขึ้นบน PETSc) แต่ปริมาณงาน / การเข้ารหัสเกี่ยวข้องมากกว่าแค่เขียนมันธรรมดา Fortran 95


1
ในการนี้ฉันจะเพิ่มว่าคุณสามารถทำการเขียนโปรแกรมเชิงวัตถุอย่างจริงจังใน Fortran 2003 ดูตัวอย่างคำแนะนำนี้ ฉันใช้มันมากในรหัสของฉันเองและมันก็มีประสิทธิภาพมากสำหรับสิ่งที่ฉันต้องการจะทำ ผู้คนจำนวนมากจะบอกให้คุณหลีกเลี่ยง - ฉันบอกว่าเปิดใจคุณอาจชอบมันมาก ฉันทำอย่างแน่นอน
Daniel Shapero

4

Python เป็นประโยชน์อย่างมากสำหรับการวิเคราะห์การจำลองเต็มรูปแบบด้วยแพคเกจเอนกประสงค์ที่มีเอกสารครบถ้วน: การสร้างกริด, การคำนวณอาร์เรย์และการจัดการโครงสร้างข้อมูล ( numpy and pandas) ) รวมถึงการสร้างภาพข้อมูลด้วย matplotlib สำหรับการจำลองที่ซับซ้อนที่มีไฟล์ผลลัพธ์ขนาดใหญ่จะเป็นการดียิ่งขึ้นที่จะทำงานกับแพ็คเกจ VTK ซึ่งช่วยให้การส่งออกข้อมูลสามารถอ่านได้โดยแอปพลิเคชันโอเพ่นซอร์สขั้นสูง (เช่น Paraview หรือ Visit)

Fortranได้ใช้ภาษาที่ต้องการสำหรับโดเมนต่าง ๆ เป็นระยะเวลาหนึ่ง สามารถอ่านได้ง่าย (อ่านน้อยกว่ารหัส Python) การจัดการอาเรย์เป็นหนึ่งในจุดแข็งของภาษาค่อนข้างง่ายต่อการกำหนดและใช้งานการใช้งานอาเรย์ทุกชนิด มันมีประโยชน์เมื่อทำการดีบักเช่นกัน

การเปรียบเทียบทำให้ประสิทธิภาพลดลง: ฉันเพิ่งทำการคำนวณขนาดใหญ่โดยใช้ภาษาที่รวบรวม (C ++ และ Fortran 90) แต่ไม่เคยใช้ Python อีกหัวข้อหนึ่งให้ข้อมูลประสิทธิภาพเพิ่มเติมเกี่ยวกับภาษาที่แปลและรวบรวม: ฉันควรใช้ภาษาอะไรเมื่อสอนหลักสูตรระดับปริญญาตรีในการเขียนโปรแกรมคอมพิวเตอร์

โดยส่วนตัวฉันชอบทำงานกับ Python โดยทั่วไปโดยเฉพาะอย่างยิ่งสำหรับการประมวลผลภายหลัง การเขียนโปรแกรม Python สนุก!


1
ประสิทธิภาพเป็นสิ่งสำคัญเกือบตลอดเวลา การขาดความสนใจต่อประสิทธิภาพเป็นสาเหตุที่ผู้คนต้องการ 8 คอร์พร้อม RAM ขนาด 16Gb เพื่อตรวจสอบอีเมลและท่องเว็บ
stali

ฉันมีความโชคร้ายที่ต้องอ่านรหัสหลามของคนอื่น ฉันจะไม่จัดหมวดหมู่รหัส py ให้อ่านง่าย
Biswajit Banerjee

@stali: ฉันเห็นด้วยทั้งหมด
SAAD

1
@BiswajitBanerjee: มันเป็นไปไม่ได้ที่จะเขียนโค้ดที่ซับซ้อนด้วยภาษาใด ๆ แต่อย่างน้อยฉันก็สามารถระบุอินพุตและเอาท์พุตของฟังก์ชั่นใด ๆ ได้อย่างง่ายดายนี่คือที่ Fortran กลายเป็นสิ่งที่น่ากลัว! :)
SAAD

3

ด้วย Python คุณไม่จำเป็นต้องใช้ Gnuplot คุณสามารถใช้ตัวอย่างเช่น matplotlib และ / หรือใช้ IPython shell IPython เป็น Python แบบโต้ตอบเชลล์ที่ในโหมด% pylab จะมีคำสั่งการพล็อตแบบเดียวกับที่คุณมีใน MATLAB

มีความเป็นไปได้ค่อนข้างมากที่การคำนวณทางวิทยาศาสตร์จะเปลี่ยนจาก MATLAB ไปเป็น Python อย่างมากในอีก 5 ปีข้างหน้า


ข้อดีอย่างหนึ่งของ Gnuplot ก็คือมันมักจะติดตั้งบนเครื่อง Linux (คลัสเตอร์ / เซิร์ฟเวอร์ ฯลฯ ) และมีประโยชน์มากสำหรับการทำงานที่รวดเร็ว / สกปรก มันเหมือน vi สำหรับ ได้แก่
stali

1

ฉันจะใช้ MATLAB ต่อไปมันเรียกห้องสมุดคณิตศาสตร์ที่รวดเร็วและคุณจะไม่เห็นความแตกต่างของประสิทธิภาพการทำงานมากนักโดยเปลี่ยนไปใช้ FORTRAN บน Windows ในเวลาเดียวกันคุณจะมีโครงสร้างพื้นฐานที่ดีขึ้นใน MATLAB สำหรับการรายงานผลและใช้รหัสของคุณ ข้อเสียของ MATLAB คือราคา ฟอร์แทรนนั้นฟรีและมีห้องสมุดฟรีอยู่มากมาย

FORTRAN นั้นง่ายมากในการเรียนรู้และเริ่มเขียนโปรแกรมโดยพื้นฐานแล้วมันทำในสิ่งที่ชื่อแนะนำ: แปลสูตรของคุณเป็นรหัสซึ่งง่ายต่อการอ่านและเข้าใจ นั่นเป็นเหตุผลที่นักฟิสิกส์ใช้มันมาตั้งแต่สมัยโบราณ ตราบใดที่รหัสของคุณส่วนใหญ่เกี่ยวกับการแก้ปัญหาฟิสิกส์ (ไม่ใช่การสร้าง GUI หรือทำสิ่งดีๆอื่น ๆ ) รหัส FORTRAN จะง่ายต่อการบำรุงรักษา

ฉันจะแนะนำ Python เฉพาะเมื่อคุณสนุกกับการเขียนโปรแกรม ลองคิดดูสิ: เมื่อคุณเขียนรหัสวิธีแก้ปัญหาฟิสิกส์คุณสนุกกับการเขียนโปรแกรมเป็นส่วนหนึ่งของโซลูชันหรือไม่ ถ้าคุณทำเช่นนั้น Python เป็นตัวเลือกเนื่องจากภาษานั้นดีกว่า MATLAB มาก


2
ข้อความของคุณเกี่ยวกับความแตกต่างของประสิทธิภาพในการเปลี่ยนจาก MATLAB ไปเป็น Fortran นั้นไม่เป็นความจริง Fortran นั้นยอดเยี่ยมถ้าคุณกำลังเขียนโค้ดซึ่งอาร์เรย์นั้นเป็นโครงสร้างข้อมูลที่ดีโดยธรรมชาติถ้าคุณสามารถใช้ชีวิตกับวิธีการจัดการ I / O และถ้ามีไลบรารีที่คุณต้องการ ห้องสมุดตัวเลขใน Python ทับซ้อนกันอย่างมากในการทำงานกับ MATLAB และฉันพบว่าการเขียนอินเตอร์เฟส Python ไปยังรหัส C ง่ายกว่าอินเตอร์เฟส MATLAB ไปยังรหัส C
Geoff Oxberry

บางครั้งคุณทำเห็นความแตกต่างมาก ฉันเพิ่งเขียนโปรแกรมจำลองสถานการณ์ทางฟิสิกส์จาก Matlab (โดยใช้แพ็คเกจ bvp6c ภายใน) เป็น Fortran 2008 (ใช้แพ็คเกจ bvp_solver ภายใน) และเวลาดำเนินการลดลงเหลือเพียง 1.4% หลังจากสวิตช์แม้ว่าฉันจะไม่เปลี่ยนอัลกอริทึม หรือโครงสร้างโดยรวมของโปรแกรม สำหรับการจำลองที่ต้องใช้เวลาประมาณ 3.5 วันต่อดาต้าพอยน์เพื่อมาบรรจบกันนี่เป็นการปรับปรุงที่เห็นได้ชัดเจนมาก
jabirali
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.