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

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

3
การใช้หน่วยความจำใน fortran เมื่อใช้อาร์เรย์ของชนิดที่ได้รับกับตัวชี้
ในโปรแกรมตัวอย่างนี้ฉันกำลังทำสิ่งเดียวกัน (อย่างน้อยฉันก็คิดอย่างนั้น) ในสองวิธีที่แตกต่างกัน ฉันใช้งานบนพีซีลีนุกซ์และตรวจสอบการใช้งานหน่วยความจำด้วยด้านบน การใช้ gfortran ฉันพบว่าในวิธีแรก (ระหว่าง "1" และ "2") หน่วยความจำที่ใช้คือ 8.2GB ในขณะที่วิธีที่สอง (ระหว่าง "2" และ "3") การใช้หน่วยความจำคือ 3.0GB ด้วยคอมไพเลอร์ของ Intel ความแตกต่างก็ยิ่งใหญ่กว่า: 10GB เทียบกับ 3GB นี่ดูเหมือนจะเป็นการลงโทษที่มากเกินไปสำหรับการใช้พอยน์เตอร์ ทำไมสิ่งนี้ถึงเกิดขึ้น program test implicit none type nodesType integer:: nnodes integer,dimension(:),pointer:: nodes end type nodesType type nodesType2 integer:: nnodes integer,dimension(4):: nodes end type nodesType2 …

4
C ช้ากว่าฟอร์แทรนในการยิงบรรทัดฐานสเปกตรัม (ใช้ gcc, intel และคอมไพเลอร์อื่น ๆ ) หรือไม่
ข้อสรุปที่นี่: คอมไพเลอร์ของ Fortran นั้นดีกว่ามากแค่ไหน? คือ gfortran และ gcc นั้นรวดเร็วสำหรับโค้ดง่าย ๆ ฉันอยากลองอะไรที่ซับซ้อนกว่านี้ ฉันเอาตัวอย่างการยิงบรรทัดฐานสเปกตรัม ฉันก่อนการคำนวณเมทริกซ์ 2 มิติ A (:, :) แล้วคำนวณเกณฑ์ปกติ (วิธีแก้ปัญหานี้ไม่ได้รับอนุญาตในการยิงที่ฉันคิดว่า) ฉันได้ใช้ Fortran และรุ่น C นี่คือรหัส: https://github.com/certik/spectral_norm รุ่น gfortran ที่เร็วที่สุดคือ spectral_norm2.f90 และ spectral_norm6.f90 (อันหนึ่งใช้ matmul ในตัวและ dot_product ของ Fortran อีกตัวหนึ่งใช้ฟังก์ชันทั้งสองนี้ในรหัส - โดยไม่มีความแตกต่างด้านความเร็ว) รหัส C / C ++ ที่เร็วที่สุดที่ฉันสามารถเขียนได้คือ spectral_norm7.cpp การจับเวลาของ git …
13 fortran  c 

1
มีเครื่องมือที่สามารถสร้างส่วนขยายช่วงเวลาของฟังก์ชัน Fortran (หรือ C) โดยการแยกรหัส Fortran (หรือ C) หรือไม่
กรณีศึกษาในวิทยานิพนธ์ระดับปริญญาเอกของฉันกำหนดว่าฉันต้องมีการขยายรูทีนย่อยของ Fortran ในCHEMKIN-II (ขอโทษสำหรับการเชื่อมโยงมันเป็นสิ่งที่ดีที่สุดที่ฉันสามารถหาได้สำหรับแพ็คเกจที่ไม่ได้จัดจำหน่ายโดย Sandia National Laboratory) CHEMKIN-II เป็นแพ็คเกจทางเคมีที่ใช้ในเคมีการเผาไหม้ เนื่องจากเป็นแพ็คเกจมาตรฐานที่ใช้ในการเผาไหม้ฉันจึงไม่สามารถ (หรือมากกว่านั้นไม่ต้องการ) ใช้แพ็คเกจอื่นที่นั่น เพื่อให้ได้ส่วนขยายช่วงเวลาที่ต้องการฉันใช้เครื่องมือที่พัฒนาขึ้นภายในชื่อDAEPACK. ไบนารีเก่าที่ฉันเคยใช้เพื่อสร้างส่วนขยายช่วงเวลาที่ต้องการของรูทีนย่อย CHEMKIN-II ที่ฉันต้องการในระบบปฏิบัติการ 32- บิต (ด้วยเวอร์ชันของ libstdc ที่สอดคล้องกับ gcc 2.95) เมื่อสองสามปีที่แล้ว ล้าสมัยและจะเป็นอุปสรรคอย่างมากในการใช้งาน (เพราะฉันต้องค้นหาซอฟต์แวร์เวอร์ชั่นอื่น ๆ ที่ใช้มา 32 บิต) ซอร์สโค้ดสำหรับแพ็คเกจนี้ก็เป็นกรรมสิทธิ์ แต่เนื่องจากเดิมพัฒนาขึ้นที่ MIT และฉันทำงานที่ MIT ฉันจึงสามารถ (หลังจากใช้ความพยายามอย่างมาก) ในการรับซอร์สโค้ดสำหรับ DAEPACK เมื่อใช้ซอร์สโค้ดที่ฉันมีฉันสามารถรวบรวม DAEPACK รุ่นที่เข้ากันได้กับ Linux เวอร์ชัน 64 บิตและ libstdc รุ่นที่สอดคล้องกับ gcc 4.xx …

4
เลขชี้กำลังเมทริกซ์ของเมทริกซ์แบบเอียง - เฮอร์มีเชียนที่มี Fortran 95 และ LAPACK
ฉันเพิ่งเข้าสู่ Fortran 95 สำหรับการจำลองกลศาสตร์ควอนตัม สุจริตฉันถูกนิสัยเสียโดย Octave ดังนั้นฉันจึงได้รับการยกกำลังเมทริกซ์สำหรับการรับ ที่กำหนด (ขนาดเล็ก ) ลาดเมทริกซ์ -Hermitian ขนาดn × nสิ่งที่เป็นวิธีที่มีประสิทธิภาพมากที่สุดของการใช้ LAPACK ที่จะแก้ปัญหานี้หรือไม่ ฉันไม่ได้ใช้เครื่องห่อหุ้ม LAPACK95 เพียงโทรไปที่ LAPACK โดยตรงn ≤ 36n≤36n\leq 36n × nn×nn\times n
11 fortran  lapack 

2
วิธีทำงานกับพอยน์เตอร์ฟังก์ชั่นใน Fortran ในโปรแกรมวิทยาศาสตร์
นี่คือการใช้งานทั่วไปของตัวชี้ฟังก์ชันใน C. ฉันต้องการทำสิ่งที่คล้ายกันใน Fortran ฉันมีความคิดบางอย่าง แต่ฉันต้องการที่จะรู้ว่ามีวิธีที่ยอมรับได้หรือไม่ พอยน์เตอร์ของฟังก์ชั่นและบริบทที่ผ่านเข้ามาโดยผู้ใช้จะถูกเก็บไว้จากนั้นเรียกในภายหลัง typedef PetscErrorCode (*TSIFunction)(TS,PetscReal,Vec,Vec,Vec,void*); PetscErrorCode TSSetIFunction(TS ts,Vec res,TSIFunction f,void *ctx); ฟังก์ชั่นของผู้ใช้จะถูกเรียกคืนโดยใช้บริบทของพวกเขาในเวลาต่อมา ใน PETSc พวกเขายังใช้ประโยชน์จากตารางตัวชี้ฟังก์ชัน -> ทุกอย่างเป็นปลั๊กอินดังนั้นผู้ใช้สามารถลงทะเบียนการใช้งานของตัวเองและพวกเขาเป็นชั้นหนึ่ง #define PCGAMG "gamg" PCRegisterDynamic(PCGAMG ,path,"PCCreate_GAMG",PCCreate_GAMG); สิ่งนี้ลงทะเบียนรูทีนการสร้างใน "FList" จากนั้น PCSetFromOptions () จะเสนอความสามารถในการเลือกวิธีนี้เมื่อเทียบกับตัวเลือกอื่น ๆ หากระบบรองรับการโหลดแบบไดนามิกคุณสามารถข้ามการพึ่งพาเวลาคอมไพล์ในสัญลักษณ์ PCCreate_GAMG และเพิ่งผ่าน NULL จากนั้นสัญลักษณ์จะถูกค้นหาในไลบรารีที่แบ่งใช้ในขณะใช้งาน โปรดทราบว่าหนึ่งขั้นตอนนี้เกินกว่า "โรงงาน" มันเป็นสิ่งที่ตรงกันข้ามกับอุปกรณ์ควบคุมที่คล้ายกับสิ่งที่ Martin Fowler เรียกว่า "service locator" หมายเหตุ: สิ่งนี้เกิดขึ้นในการติดต่อส่วนตัวของฉันกับเจดบราวน์ที่ซึ่งเขาถามคำถามนี้ให้ฉัน ฉันตัดสินใจที่จะ …
11 petsc  fortran 

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

3
เมทริกซ์เลขชี้กำลังของเมทริกซ์อสมมาตรจริงด้วย Fortran 95 และ LAPACK
ฉันเพิ่งถามคำถามในบรรทัดเดียวกันสำหรับเมทริกซ์เอียง - เฮอร์เมียน ได้รับแรงบันดาลใจจากความสำเร็จของคำถามนั้นและหลังจากต่อสู้กับกำแพงเป็นเวลาสองสามชั่วโมงฉันกำลังดูเมทริกซ์เลขชี้กำลังของเมทริกซ์สมมาตรจริง เส้นทางในการค้นหาค่าลักษณะเฉพาะและค่าลักษณะเฉพาะนั้นค่อนข้างซับซ้อนและฉันกลัวว่าฉันจะสูญเสียไป ที่มา: บางครั้งฉันถามคำถามนี้เกี่ยวกับฟิสิกส์เชิงทฤษฎี SE ผลที่ได้ทำให้ฉันสมการวลีหลักเป็นเมทริกซ์แบบอสมมาตรจริง ในกรณีที่ไม่ขึ้นกับเวลาสมการหลักจะถูกแก้ไขโดยการแจกแจงเมทริกซ์นี้ ในกรณีที่ขึ้นอยู่กับเวลามันจะต้องมีการรวม ฉันเกี่ยวข้องกับความเป็นอิสระเวลาเท่านั้นในขณะนี้ เมื่อมองไปที่รูทีนย่อยต่างๆฉันคิดว่าฉันควรจะเรียก ( ? gehrd , orghr , hseqr ... ) มันไม่ชัดเจนว่ามันจะง่ายกว่าที่จะใช้เมทริกซ์จากreal*8ถึงcomplex*16และดำเนินการตามรูทีนเวอร์ชันคู่ที่ซับซ้อนเหล่านี้ หรือติดกับreal*8และใช้การเพิ่มจำนวนของอาร์เรย์ของฉันและสร้างเมทริกซ์ที่ซับซ้อนของพวกเขาในภายหลัง ดังนั้นฉันควรจะเรียกรูทีนใด (และในลำดับใด) และฉันควรใช้เวอร์ชันสองเท่าจริงหรือเวอร์ชันสองซับซ้อน? ด้านล่างนี้เป็นความพยายามในการทำเช่นนี้กับเวอร์ชันสองเท่าจริง L*tฉันกลายเป็นติดการหาเวกเตอร์ลักษณะเฉพาะของ function time_indep_master(s,L,t) ! s is the length of a side of L, which is square. ! L is a real*8, asymmetric …

2
วิธีการตั้งค่าความแม่นยำสองเท่าใน Fortran
เมื่อเร็ว ๆ นี้ฉันได้พบกับปัญหาที่แปลกประหลาดกับ FORTRAN95 ฉันเริ่มต้นตัวแปร X และ Y ดังนี้ X=1.0 Y=0.1 หลังจากนั้นฉันเพิ่มเข้าด้วยกันและพิมพ์ผลลัพธ์: 1.10000000149012 หลังจากตรวจสอบตัวแปรดูเหมือนว่า 0.1 จะไม่ถูกแสดงในความแม่นยำสองเท่าพร้อมความแม่นยำเต็มรูปแบบ มีวิธีหลีกเลี่ยงปัญหานี้หรือไม่?

4
การเรียนรู้ Fortran
ฉันสงสัยว่าวิธีที่ดีที่สุดในการเรียนรู้วิธีการเขียนโปรแกรมใน Fortran คืออะไร ฉันได้รับการมองหาหนังสือตัวอย่างที่ดูเหมือนตกลงฉันก็จะไป"Fortran 95/2003 อธิบาย"และ"Fortran สำหรับนักวิทยาศาสตร์และวิศวกร" ฉันไม่รู้ว่าพวกคุณคิดอย่างไรกับสิ่งเหล่านี้? สิ่งที่ฉันสงสัยอีกอย่างคือฉันควรใช้คอมไพเลอร์ใด? ฉันทำงานกับเครื่อง Windows 7 (64- บิต) ฉันหวังว่าพวกคุณสามารถช่วยฉันในนี้! ดังนั้นสำหรับประสบการณ์ของฉันกับการเขียนโปรแกรม: Matlab และเมเปิ้ลใจดีกับการแนะนำครั้งแรกของฉันในโลกแห่งการเขียนโปรแกรม Matlab เป็นโปรแกรมที่ฉันค่อนข้างดีจริง ๆ ฉันได้ทำงานกับลูปและวิธีการรวมเหล่านี้เพื่อสร้างโปรแกรมที่มีประสิทธิภาพมากขึ้น Maple อยู่ในช่วงเริ่มต้นมากขึ้น (ฉันรู้วิธีค้นหาโซลูชันเพื่อการผสานรวมอย่างง่ายเป็นต้น) หนึ่งปีหลังจากนั้นเราได้แนะนำ C ++ ใน Visual Basic อาจารย์ไปที่นี่อย่างรวดเร็วหลังจาก 2 เดือนเราได้คุยพอยน์เตอร์และมรดกแล้ว ฉันสามารถเขียนโปรแกรมง่าย ๆ ในภาษานี้ได้เพียงการทำงานกับชั้นเรียนเป็นสิ่งที่ยังคงเป็นปัญหา แต่ฉันเชื่อว่าเป็นเพียงเรื่องของการปฏิบัติ และอีกหนึ่งปีต่อมาฉันจำเป็นต้องเรียนรู้ Mathematica 8 ซึ่งตอนนี้ฉันก็เริ่มดีขึ้นแล้ว ดังนั้นฉันจึงมีการเขียนโปรแกรมเพิ่มขึ้นเล็กน้อย แต่ฉันจะไม่พูดว่ามันยอดเยี่ยมมาก! เหตุผลที่ฉันต้องการเรียนรู้ Fortran ส่วนใหญ่เป็นเพราะคุณไม่สามารถทำฟิสิกส์เชิงทฤษฎีด้วยตัวเองคุณต้องทดสอบทฤษฎีของคุณและเพื่อที่คุณจะต้องสามารถเขียนโปรแกรมที่อาจทดสอบทฤษฎีเหล่านั้นเป็นตัวเลขได้ ฉันได้ยินมาว่าฟอร์แทรนเป็นภาษาที่ใช้สำหรับคณิตศาสตร์เชิงตัวเลขดังนั้นฉันคิดว่ามันจะมีประโยชน์ในการรู้ภาษานี้ ps: Fortran95 …
9 fortran 

3
ฉันจะรู้ได้อย่างไรว่าโค้ดของฉันถูกแปลงเป็น vectorized โดยคอมไพเลอร์?
ดังที่อธิบายโดย Jed Brown คำตอบของต้นทุนการค้นหาและการคำนวณโดยใช้ vectorized vs non-vectorized floating point จะส่งผลให้เกิดโค้ดที่เร็วขึ้น คอมไพเลอร์สมัยใหม่หลายคนอ้างว่าพวกเขาสามารถทำการ vectorization อัตโนมัติได้ ฉันจะกำหนดส่วนของรหัสของฉันให้สำเร็จได้อย่างไร
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.