คำถามติดแท็ก fortran

Fortran เป็นภาษาโปรแกรมสำหรับวัตถุประสงค์ทั่วไปที่ใช้กันอย่างแพร่หลายในชุมชนคอมพิวเตอร์ทางวิทยาศาสตร์

6
คอมไพเลอร์ของ Fortran นั้นดีกว่าจริง ๆ
คำถามนี้เป็นส่วนขยายของการสนทนาสองครั้งที่เกิดขึ้นเมื่อเร็ว ๆ นี้ในการตอบกลับไปยัง " C ++ vs Fortran สำหรับ HPC " และมันเป็นความท้าทายมากกว่าคำถาม ... หนึ่งในข้อโต้แย้งที่ได้ยินบ่อยที่สุดในความโปรดปรานของ Fortran คือคอมไพเลอร์ดีกว่า เนื่องจากคอมไพล์เลอร์ C / Fortran ส่วนใหญ่ใช้แบ็คเอนด์เดียวกันรหัสที่สร้างขึ้นสำหรับโปรแกรมที่เทียบเท่ากันทางความหมายในทั้งสองภาษาจึงควรเหมือนกัน เราอาจโต้แย้งได้ว่า C / Fortran นั้นคอมไพเลอร์เพื่อเพิ่มประสิทธิภาพมากขึ้น / น้อยลง ดังนั้นฉันจึงตัดสินใจลองทดสอบง่ายๆ: ฉันได้รับสำเนาของdaxpy.fและdaxpy.cและรวบรวมพวกเขาด้วย gfortran / gcc ตอนนี้ daxpy.c เป็นเพียงการแปล f2c ของ daxpy.f (โค้ดที่สร้างขึ้นโดยอัตโนมัติน่าเกลียดเหมือน heck) ดังนั้นฉันจึงเอาโค้ดนั้นและทำความสะอาดมันเล็กน้อย (พบ daxpy_c) ซึ่งโดยทั่วไปหมายถึงการเขียนลูปด้านในสุดเป็น for ( i = 0 …
74 fortran  c  blas  benchmarking 

12
C ++ vs Fortran สำหรับ HPC
ในโปรแกรมปริญญาเอกวิทยาศาสตร์การคำนวณของเราเราทำงานเกือบเฉพาะใน C ++ และ Fortran ดูเหมือนว่าอาจารย์บางคนชอบมากกว่าคนอื่น ฉันสงสัยว่าอันไหนดีกว่าหรือในอันใดอันหนึ่งดีกว่าในบางกรณี
56 hpc  fortran  c++  languages 

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

8
แพ็คเกจใดที่ฉันควรใช้เพื่อห่อ Modern Fortran Code กับ Python
ฉันรู้และใช้f2py2eเพื่อห่อรหัส Fortran 77 เก่าบางส่วน แต่ความเข้าใจของฉันคือว่ามันไม่ทำงานกับรหัส Fortran 95 ที่ใหม่กว่า ฉันได้ค้นคว้าสิ่งที่ฉันควรใช้และเจอ fwrap และ G3 f2py ซึ่งดูเหมือนจะไม่ให้คำอธิบายใด ๆ เกี่ยวกับสถานะปัจจุบันของพวกเขาหรือวิธีใช้ (นอกเหนือจากการใช้งานพื้นฐาน) ฉันได้เห็นด้วยเช่นกันว่าเวอร์ชันของ f2py มีตัวเลือกให้ใช้รุ่นที่สามของ f2py แต่มันก็มีความเห็นว่าเป็นการใช้งานไม่ได้ รับสิ่งนี้ฉันไม่ทราบว่าโครงการใดที่ฉันควรใช้สำหรับโครงการเดียว ฉันควรใช้รหัสใดกับรหัสใหม่ ป.ล. นี่เป็นคำถามเดียวกันกับhttps://stackoverflow.com/questions/10665717/current-best-method-for-wrapping-modern-fortran-code-with-pythonแนะนำว่าการถามที่นี่อาจให้คำตอบที่ดีกว่า .
27 python  fortran 

3
ฉันจะติดตั้งคอมไพเลอร์ Fortran บน Mac ได้อย่างไร (OS X 10.x, x> = 4)
คำถามที่เกี่ยวข้อง: สถานะของ Mac OS ใน Scientific Computing และ HPC แพคเกจซอฟต์แวร์จำนวนมากในสาขาวิทยาศาสตร์การคำนวณเขียนใน Fortran และ Fortran จะไม่หายไป คอมไพเลอร์ Fortran ยังจำเป็นต้องมีการสร้างแพ็คเกจซอฟต์แวร์อื่น ๆ (ตัวอย่างหนึ่งที่น่าสังเกตว่าเป็นSciPy ) อย่างไรก็ตาม Mac OS X ไม่รวมคอมไพเลอร์ Fortran ฉันจะติดตั้งคอมไพเลอร์ Fortran บนเครื่องของฉันได้อย่างไร?
25 software  fortran 

3
Intel Fortran Compiler: เคล็ดลับในการเพิ่มประสิทธิภาพที่รวบรวม
ฉันจะเริ่มต้นด้วยประสบการณ์ส่วนตัวในห้องแล็บของเรา ย้อนกลับไปใน ifort 9 และ 10 วันเราเคยก้าวร้าวมากกับการปรับให้เหมาะสมรวบรวมด้วยแฟล็ก -O3 และตัวประมวลผลเฉพาะ (-xW -xSSE4.2 เป็นต้น) แต่เริ่มต้นด้วย ifort 11 เราเริ่มสังเกตเห็น: 1. ความไม่สอดคล้องกันบางอย่างในผลลัพธ์ (เพราะซีแมนทิกส์ไม่ได้รับการเก็บรักษาไว้) 2. กำไรเล็กลงเมื่อเทียบกับ -O2 ดังนั้นในปัจจุบันเรามักจะคอมไพล์ด้วย -O2 และ -xhost คุณมีคำแนะนำที่ดีกว่าสำหรับ ifort 11 หรือไม่ การเปลี่ยนแปลงนี้จะเกิดขึ้นอีกครั้งเมื่อเราเปลี่ยนเป็น ifort 12 หรือไม่ ขอบคุณล่วงหน้า.

6
ฉันจะเขียนโค้ดผู้ไม่เชื่อเรื่องพระเจ้าได้อย่างไร
ฉันมักจะพบว่าตัวเองกำลังเขียนโค้ดที่คล้ายกันมากสำหรับรุ่นหนึ่งสองและสามมิติของการดำเนินการ / อัลกอริทึมที่กำหนด การบำรุงรักษาเวอร์ชันเหล่านี้ทั้งหมดอาจกลายเป็นเรื่องน่าเบื่อ การสร้างโค้ดอย่างง่ายนั้นใช้งานได้ดี แต่ดูเหมือนว่าจะต้องมีวิธีที่ดีกว่า มีวิธีที่ค่อนข้างง่ายในการเขียนการดำเนินการเพียงครั้งเดียวและมีการพูดคุยกับมิติที่สูงขึ้นหรือต่ำลงหรือไม่? ตัวอย่างที่ชัดเจนประการหนึ่งคือสมมติว่าฉันต้องการคำนวณการไล่ระดับสีของสนามความเร็วในอวกาศ ในสามมิติลูป Fortran จะมีลักษณะดังนี้: do k = 1, n do j = 1, n do i = 1, n phi(i,j,k) = ddx(i)*u(i,j,k) + ddx(j)*v(i,j,k) + ddx(k)*w(i,j,k) end do end do end do โดยที่ddxarray นั้นถูกกำหนดอย่างเหมาะสม (เราสามารถทำได้ด้วยการคูณเมทริกซ์) โค้ดสำหรับโฟลว์สองมิตินั้นเกือบจะเหมือนกันทุกประการยกเว้น: มิติที่สามถูกดร็อปจากลูปดัชนีและจำนวนของคอมโพเนนต์ มีวิธีที่ดีกว่าในการแสดงสิ่งนี้หรือไม่? อีกตัวอย่างคือ: สมมติว่าฉันมีความเร็วของของไหลที่กำหนดจุด - ฉลาดในตารางสามมิติ เพื่อสอดแทรกความเร็วไปยังตำแหน่งตามอำเภอใจ …

2
F2Py กับอาร์เรย์รูปร่างที่จัดสรรและสันนิษฐาน
ฉันต้องการใช้f2pyกับ Fortran ที่ทันสมัย โดยเฉพาะอย่างยิ่งฉันพยายามทำให้ตัวอย่างพื้นฐานต่อไปนี้ทำงาน นี่คือตัวอย่างที่มีประโยชน์น้อยที่สุดที่ฉันสามารถสร้างได้ ! alloc_test.f90 subroutine f(x, z) implicit none ! Argument Declarations ! real*8, intent(in) :: x(:) real*8, intent(out) :: z(:) ! Variable Declarations ! real*8, allocatable :: y(:) integer :: n ! Variable Initializations ! n = size(x) allocate(y(n)) ! Statements ! y(:) = 1.0 z …
18 python  fortran 

5
การพัฒนาซอฟต์แวร์คำนวณทางวิทยาศาสตร์แบบขนาน
ฉันต้องการพัฒนาซอฟต์แวร์การคำนวณทางวิทยาศาสตร์แบบขนานตั้งแต่เริ่มต้น ฉันต้องการความคิดเกี่ยวกับภาษาที่จะเริ่มต้น โปรแกรมนี้เกี่ยวข้องกับการอ่าน / เขียนข้อมูลไปยังไฟล์ txt และทำการคำนวณอย่างหนักพร้อม ๆ กันโดยมี factorizations LU จำนวนมากและการใช้ตัวแก้ปัญหาเชิงเส้นแบบกระจัดกระจาย ทางเลือกที่ฉันคิดคือ Fortran 2003/2008 กับ OpenMP หรือ co-array, C ++ กับ openmp cilk + หรือ TBB, python ข้อเสนอแนะอื่น ๆ เอกสารยินดีต้อนรับ! ฉันรู้ดีมาก C, Fortran และ Java (ตามลำดับ) ฉันได้ทำสคริปต์บางอย่างในหลาม แต่เป็นสิ่งพื้นฐาน ฉันรู้ว่าฟอร์แทรนนั้นเร็วมาก แต่ยากที่จะรักษาและขนานกัน C ++ บอกว่าช้าถ้าคุณใช้ไลบรารี่ภายนอกและอื่น ๆ ฉันชอบไพ ธ อน แต่เป็นเรื่องจริงไหมที่จะเขียนซอฟต์แวร์ระดับอุตสาหกรรมเต็มรูปแบบ? ซอฟต์แวร์ต้องสามารถจัดการข้อมูลจำนวนมากและมีประสิทธิภาพด้วยการคำนวณทางวิทยาศาสตร์ …

2
ฉันควรเรียนรู้ Fortran เวอร์ชันใด
ฉันเป็นนักเรียนวิศวกรรมเครื่องกลที่สนใจในสาขาวิศวกรรมการบินและอวกาศที่ฉันบอกว่า Fortran ยังคงใช้กันทั่วไป Fortran รุ่นใดที่ฉันควรใช้เวลาในการเรียนรู้
17 fortran 

6
Python กับ FORTRAN
อันไหนดีกว่า: FORTRAN หรือ Python และฉันเดาว่าในทั้งสองกรณีคุณต้องการ Gnuplot ฉันพูดถูกมั้ย ฉันกำลังทำงานกับเครื่อง Windows ในขณะนี้ ฉันต้องการใช้มันเพื่อหาวิธีแก้ปัญหาเชิงตัวเลขสำหรับปัญหาฟิสิกส์รวมถึงการจำลองของมอนติคาร์โลการบูรณาการเชิงตัวเลขและความแตกต่างการเปลี่ยนแปลงในระดับโมเลกุลเป็นต้น ฉันเห็นหลักสูตรเกี่ยวกับฟิสิกส์เชิงคำนวณซึ่งแนะนำทั้ง FORTRAN (77 ฉันเชื่อ) และ Python ฉันวางแผนที่จะเริ่มต้นด้วยสิ่งใดสิ่งหนึ่งและจากนั้นเรียนรู้สิ่งอื่น แต่ฉันไม่รู้ว่าการเปลี่ยนแปลงใดอาจเป็นวิธีที่ง่ายที่สุด คุณต้องการแนะนำคอมไพเลอร์ใดด้วย? คำถามพื้นฐานสำหรับฉันมาถึง: สิ่งที่ง่ายที่สุดในการเรียนรู้ซึ่งเป็นคำถามที่เร็วที่สุดซึ่งเป็นคำถามที่ใช้ง่ายที่สุดและเหนือกว่าคำถามใดที่ใช้มากที่สุด (เพื่อเปรียบเทียบ 4 ข้อนี้) และถัดจากนั้นคอมไพเลอร์ที่ใช้บ่อยที่สุด (ฟรีหรือมีค่าใช้จ่าย) ใช้งานอะไร? ฉันกำลังพิจารณาที่จะแปลงแล็ปท็อปเครื่องเก่า (Intel dual core รุ่นแรก) เป็น Linux หวังว่าจะเร็วพอ ขอบคุณมากสำหรับคำตอบจนถึงตอนนี้! คำตอบที่สอดคล้องกับสิ่งที่ฉันกำลังค้นหาคือคำตอบของ LKlevin และ SAAD ฉันรู้พื้นฐานของ C ++, Maple และฉันเป็นอาจารย์ MATLAB และ Mathematica9 เกือบจะสมบูรณ์ถ้ามันช่วยได้
17 python  fortran 

4
แถวที่สำคัญเทียบกับรูปแบบที่สำคัญของการฝึกอบรมคอลัมน์
ในการเขียนโปรแกรมการคำนวณเมทริกซ์หนาแน่นมีเหตุผลใดที่จะเลือกเลย์เอาต์แถวหลักของผังเหนือคอลัมน์หลัก? ฉันรู้ว่าขึ้นอยู่กับเลย์เอาต์ของเมทริกซ์ที่เลือกเราจำเป็นต้องเขียนโค้ดที่เหมาะสมเพื่อใช้หน่วยความจำแคชอย่างมีประสิทธิภาพเพื่อวัตถุประสงค์ด้านความเร็ว เลย์เอาต์แถวหลักดูเหมือนเป็นธรรมชาติและเรียบง่ายกว่า (อย่างน้อยสำหรับฉัน) แต่ไลบรารี่หลักเช่น LAPACK ซึ่งเขียนใน Fortran ใช้เลย์เอาต์หลักของคอลัมน์ดังนั้นจะต้องมีเหตุผลบางอย่างในการเลือกนี้
16 matrix  fortran 

3
Fortran: วิธีที่ดีที่สุดในการตั้งเวลาส่วนรหัสของคุณ?
บางครั้งในขณะที่การปรับรหัสให้เหมาะสมต้องใช้เวลาบางส่วนของรหัสฉันใช้สิ่งต่อไปนี้มาหลายปีแล้ว แต่สงสัยว่ามีวิธีที่ง่ายกว่าหรือดีกว่าในการทำ? call system_clock(count_rate=clock_rate) !Find the time rate call system_clock(count=clock_start) !Start Timer call do_something_subroutine !This is what gets timed call system_clock(count=clock_stop) ! Stop Timer e_time = real(clock_stop-clock_start)/real(clock_rate)

1
วิธีเรียกใช้ MPI-3.0 ในโหมดหน่วยความจำที่แชร์เช่น OpenMP
ฉันกำลังโค้ดแบบขนานเพื่อแก้ตัวเลขแบบจำลองสมดุลประชากร 5 มิติ ขณะนี้ฉันมีรหัส MPICH2 ที่ดีมากใน FORTRAN แต่เมื่อเราเพิ่มค่าพารามิเตอร์อาร์เรย์จะใหญ่เกินไปที่จะทำงานในโหมดหน่วยความจำแบบกระจาย ฉันสามารถเข้าถึงคลัสเตอร์ที่มี 15 โหนดโดยที่แต่ละโหนดมี CPU หลัก 8 ตัวและ RAM ขนาด 128GB ฉันต้องการเขียนเรียกใช้โปรแกรมด้วย MPI-3.0 ในโหมดหน่วยความจำที่ใช้ร่วมกันเพื่อให้แต่ละกระบวนการไม่สร้างสำเนาของแต่ละอาร์เรย์ขึ้นมาเอง ก่อนที่ฉันจะรันอะไรก็ได้ในคลัสเตอร์ฉันต้องทดสอบบนเดสก์ท็อปที่ใช้ Ubuntu มันคือเบลดหนึ่งคลัสเตอร์ที่มี CPU 8 คอร์สองตัวและ RAM ขนาด 128 GB ฉันจะเขียนและทดสอบรหัสของฉันบนมันดังนั้นโปรดส่งคำตอบของคุณไปยังโปรแกรมที่ทำงานบนคอมพิวเตอร์ Ubuntu ฉันได้อ่านแล้วว่ามีวิธีเรียกใช้ MPI-3.0 ในโหมดหน่วยความจำที่ใช้ร่วมกันเช่น OpenMP แทนที่จะเป็นโหมดหน่วยความจำเริ่มต้นแบบกระจาย คำถาม: ฉันจะเปลี่ยนรหัสได้อย่างไร ฉันต้องเพิ่มการเรียกไปยังฟังก์ชั่น MPI อื่นMPI_WIN_ALLOCATEหรือไม่? ฉันจะรวบรวมรหัสของฉันเพื่อเรียกใช้ MPI-3.0 ในโหมดหน่วยความจำที่ใช้ร่วมกันได้อย่างไร สิ่งนี้จะแตกต่างกันหรือไม่หากมีหลายโหนด โปรดให้สคริปต์การรวบรวมตัวอย่างถ้าคุณทำได้ ฉันมีคอมไพเลอร์ GNU …

6
มีห้องสมุดวิทยาศาสตร์โอเพ่นซอร์สที่ใช้ Fortran สมัยใหม่กับ OOP หรือไม่?
ฉันใช้เวลาสองสามเดือนที่ผ่านมาในการเขียนโปรแกรม Fortran เพื่อแก้ปัญหาระบบ PDE (อธิบายการไหลของของไหลและการเผาไหม้) ฉันพยายามใช้ Fortran มาตรฐานล่าสุดและความสามารถของ OOP ใหม่ที่ Fortran มี ฉันทำงานด้วยตัวเองและไม่มีกูรูด้านฟอร์แทรนข้างฉันเพื่อถามคำถามดังนั้นวิธีที่จะเรียนรู้ให้ฉันก็คือการดูห้องสมุด / นักแก้ปัญหาอื่น ๆ ที่ใช้ Fortran ที่ทันสมัย น่าเสียดายที่ห้องสมุดของ Fortran ทุกแห่งในนั้นดูเหมือนว่าจะถูกเขียนใน Fortran ที่เก่าแก่ทีเดียว ดังนั้นฉันต้องคิดผ่านการออกแบบชั้นเรียนและการมีปฏิสัมพันธ์กับตัวเอง และฉันก็ไม่ได้เป็นคนที่รับรองว่าฉันทำถูกต้องโดยเฉพาะอย่างยิ่งถ้ามีคนมองจากมุมมองของ preformance แต่บางทีฉันอาจพลาดบางสิ่งบางอย่างและมีแพ็คเกจทางวิทยาศาสตร์สมัยใหม่ที่เขียนขึ้นหาก Fortran และใช้ OOP หรือไม่ มีไลบรารี C ++ ที่ดีมากมายที่จะเรียนรู้จาก (OpenFOAM, deal.II และอื่น ๆ ) และไลบรารี Python ภาษาเหล่านั้นมีชุมชนที่ใหญ่กว่าโดยทั่วไปเช่นกัน อาจดีกว่าที่จะวาง Fortran และเปลี่ยนภาษาถ้าฉันต้องการเรียนรู้จากตัวอย่าง?
14 fortran 

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