รหัสฐานขนาดใหญ่ที่ Fortran สามารถบีบอัดให้ทันสมัยได้อย่างไร?


21

เพื่อนในสถาบันการศึกษาขอคำแนะนำจากฉัน (ฉันเป็นนักพัฒนาแอปพลิเคชันทางธุรกิจ C #)

เขามี codebase ดั้งเดิมซึ่งเขาเขียนที่ Fortran ในวงการถ่ายภาพทางการแพทย์ การบีบอัดตัวเลขเป็นจำนวนมากโดยใช้เวกเตอร์ เขาใช้คลัสเตอร์ (30ish cores) และตอนนี้ได้เข้าสู่เวิร์กสเตชันเดียวที่มี 500ish GPUS ในนั้น

อย่างไรก็ตามจะไปที่ไหนต่อไปกับ codebase ดังนั้น:

  • คนอื่นสามารถรักษามันไว้ได้ในรอบ 10 ปีถัดไป
  • เร็วขึ้นเมื่อปรับแต่งซอฟต์แวร์
  • สามารถทำงานบนโครงสร้างพื้นฐานที่แตกต่างกันโดยไม่ต้องคอมไพล์ใหม่

หลังจากการวิจัยจากฉัน (นี่คือพื้นที่ที่น่าสนใจสุด ๆ ) บางตัวเลือกคือ:

  • ใช้ Python และCUDAจากNvidia
  • เขียนซ้ำในภาษาที่ใช้งานได้ ตัวอย่างเช่นF #หรือHaskell
  • ใช้ระบบคลาวด์และใช้บางอย่างเช่นHadoopและ Java
  • เรียนรู้ค

ประสบการณ์ของคุณเกี่ยวกับสิ่งนี้คืออะไร? สิ่งที่เพื่อนของฉันควรจะดูเพื่อปรับปรุง codebase ของเขาให้ทันสมัย

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

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

ดูMedical Imagingและคนที่เขียนชุดคลุม Fortran สำหรับ CUDA ฉันสามารถเผยแพร่ Fortra 90 wrappers ของฉันไปที่ห้องสมุด CUFFT ของ CUidi ของ Nvidias (จาก CUDA SDK) ได้ไหม? .


ฉันจะเพิ่ม OpenCL ในรายการ
Jerry Coffin

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

คุณหมายถึงอะไรโดยเฉพาะภายใต้ "สามารถทำงานบนโครงสร้างพื้นฐานที่แตกต่างกันโดยไม่ต้องคอมไพล์ใหม่"?
โกง

สวัสดี @Idigas - ฉันไม่แน่ใจในรายละเอียดที่เฉพาะเจาะจง แต่โดยหลักแล้วเรื่องราวนั้นเกิดขึ้นเมื่อนำ codebase ไปยังกลุ่ม / เครื่องจักรอื่น ๆ มันกลายเป็นฝันร้ายที่จะได้รับไลบรารีที่ถูกต้องทั้งหมดเพื่อรวบรวมเข้าด้วยกัน ฉันเชื่อว่า codebase ถูกนำมาจาก F77 เป็น F90 หรืออะไรก็ตาม .. โดยทั่วไปฉันพยายามช่วยเขาพูดคุยกับผู้คนที่เหมาะสมในการตัดสินใจอย่างชาญฉลาดว่าจะเปลี่ยนสถาปัตยกรรม / ภาษา ฉันมาจากพื้นหลังที่ลูกค้าไม่ชอบวันพิเศษในการเขียนโปรแกรมดังนั้นฉันสามารถทำอะไรได้บ้างเพื่อช่วยให้ฉันเขียนโค้ดที่ดีที่สุดที่เป็นไปได้เร็วที่สุดคืออุดมคติ :-)
Dave Mateer

@DaveMateer - ดูคำตอบของฉัน (ไม่พอดีในกล่องนี้ที่นี่) ฉันจะไปนอนในขณะนี้ดังนั้นการตอบกลับในอนาคตอาจจะมีบิตช้า :)
โกง

คำตอบ:


24

ความต้องการที่คุณใส่ไว้นั้นทำให้ Fortran อยู่ด้านบนสุดของรายการสำหรับปัญหาเช่นนี้:

a) crunching ตัวเลข
b) paralellable
c) มันยังคงเป็นภาษาde พฤตินัยที่สอนนอกการเรียน cs (สำหรับวิศวกรที่ไม่ใช่โปรแกรมเมอร์มืออาชีพ)
d) มีการสนับสนุนอุตสาหกรรม (!) อย่างไม่น่าเชื่อจำนวนผู้รวบรวมคอมไพเลอร์ระดับอุตสาหกรรมโดยไม่มีผู้ขายรายใดแสดงสัญญาณน้อยที่สุดในการละทิ้งสาขานั้น ตัวแทนคนหนึ่งของ Intel เมื่อไม่นานมานี้เปิดเผยว่ายอดขายผลิตภัณฑ์ Fortran ของพวกเขานั้นสูงกว่ายอดขายอื่น ๆ ในเครื่องมือการพัฒนาของพวกเขา

นอกจากนี้ยังเป็นภาษาที่ง่ายต่อการหยิบ ฉันไม่เห็นด้วยที่จะต้องใช้เวลาในการทำให้ผู้ช่วยวิจัยเร็วขึ้น หนังสือเรียนเล่มแรกของฉันไม่มีอีกแล้วโอ้ฉันไม่รู้หน้า 30 (?) ของข้อความที่พิมพ์กระจัดกระจาย เป็นภาษาที่เรียนรู้คำสำคัญ 10 คำสามารถเขียนโปรแกรมขนาดกลางได้ ฉันกล้าพูดว่า 30 หน้าที่เขียนด้วยข้อความ Word เริ่มต้นจะทำให้ "Fortran manual" ที่ครอบคลุมมากขึ้นสำหรับผู้ใช้ส่วนใหญ่

หากคุณกำลังสนใจใน CUDA คุณอาจต้องการตรวจสอบคอมไพเลอร์ของพอร์ตแลนด์กรุ๊ป , ที่สนับสนุนมัน ฉันไม่คุ้นเคยกับรายละเอียดปลีกย่อย แต่คนทั่วไปมักพูดถึงมันด้วยการสรรเสริญ

นอกเหนือจากนั้นสำหรับโปรแกรมแบบขนานคุณมี OpenMP, MPI และตอนนี้จะมีอาร์เรย์ร่วม (และที่รอคอยมานาน) ซึ่งคอมไพเลอร์ของ Intel เพิ่งนำมาใช้ เพื่อไม่ให้เสียคำฟอร์แทรนมีแกมม่าที่ยอดเยี่ยมของ "ไลบรารี่" สำหรับการขนานโปรแกรม

ไลบรารีตัวเลขมาตรฐานอุตสาหกรรมได้รับการพัฒนาให้เป็นภาษาที่สำคัญที่สุดภาษาอื่น ๆ ที่ตามมามากหรือน้อยลงในแฟ้มสะสมผลงาน / กิจวัตร

ทั้งหมดที่กล่าวมาฉันจะ (ขึ้นอยู่กับตอนที่มันถูกเขียนขึ้นในตอนแรก) แนะนำว่าถ้าเป็นอย่างนั้นรหัส F77 หรือเก่ากว่าเขียนใหม่บางส่วนตามเวลาในภาษาถิ่นใหม่ - F90 อย่างน้อยถ้าเป็นไปได้ด้วยคุณสมบัติ F2003 กระดาษ / วิทยานิพนธ์ในหัวข้อที่ได้รับการตีพิมพ์เมื่อเร็ว ๆ นี้ (ขนาดกลางขนาดไฟล์ PDF ไปข้างหน้า) ไม่เพียงเท่านั้นหากทำอย่างถูกต้องให้แน่ใจว่าสามารถพกพาข้ามแพลตฟอร์มที่หลากหลายได้ แต่จะทำให้การบำรุงรักษาในอนาคตง่ายขึ้น

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


@DaveMateer (ตอบกลับความคิดเห็น) - ฉันจะแสดงความคิดเห็นในสิ่งต่อไปนี้ซึ่งอาจไม่สุภาพเล็กน้อย แต่โปรดอย่าใช้วิธีที่ผิดเพราะมันอยู่ในความตั้งใจที่เป็นธรรม

ดูเหมือนว่าสำหรับฉันคุณกำลังแก้ปัญหา "ปัญหา" ในทางที่ผิด สิ่งที่ฉันหมายถึงในจุดสั้น ๆ ไม่กี่ (เพราะมันสายมากในที่นี่และความสามารถของฉันในการอ่านประโยค (เข้าใจได้คนเดียว) ทำให้ฉันออกหลังจาก 22:00 น.)

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

  • บางตัวไม่รองรับอาเรย์หลายมิติท่ามกลางสิ่งอื่น ๆ
  • ส่วนใหญ่ไม่เหมาะสมสำหรับงานที่มีตัวเลขมาก (ของความสามารถในการประมวลผลแบบขนานของ Haskell และ Hadoop ฉันยอมรับฉันไม่รู้อะไรเลยเกี่ยวกับ ... แต่ไม่เคยได้ยินพวกเขาพูดถึงแม้แต่ในวงกลมเหล่านั้น)
  • อาจเป็นไปได้ที่จะลองใช้ แต่ฉันไม่เคยได้ยินเกี่ยวกับการเขียนใหม่จาก Fortran ภาษาสำหรับปัญหาที่แยกกันไม่ออกไปเป็นภาษาที่ใช้งานได้
  • เพิ่งมีการอภิปรายเกี่ยวกับ comp.lang.fortran (ลองค้นหาผ่านกลุ่ม Google) ในแง่มุมของการคำนวณทางวิทยาศาสตร์ "ในคลาวด์"
    (ไม่ต้องการที่จะยกเลิกการกระตุ้นให้คุณ แต่จะยุติธรรมไม่มีใครจริงๆ แน่นอนว่าคำนั้นหมายถึง แต่น้อยกว่านั้นมีตัวอย่างของแอปพลิเคชั่นที่ประสบความสำเร็จคนส่วนใหญ่เห็นด้วยว่าศักยภาพนั้นมีอยู่ ปัญหามากมายไม่เหมาะสำหรับการขนานแบบนั้น

b)ค่าใช้จ่ายของการเขียนซ้ำนั้นเป็นอย่างไร? คน / ชั่วโมง

c)เวอร์ชันที่ถูกต้องของไลบรารีที่จะคอมไพล์ ...- เป็นปัญหาในภาษาใด ๆ ที่ไม่สามารถหลีกเลี่ยงได้ แต่คุณมองไปที่มัน

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

ฮึถ้าฉันคิดอย่างอื่นจะเพิ่มในวันพรุ่งนี้ ต้องนอนหลับ ...


@Idigas .. ได้ชื่นชมอีกครั้ง ตกลงกันโดยสิ้นเชิงว่าเมื่อมีอะไรบางอย่างทำงานแล้วนั่นหมายถึงมาก อุตสาหกรรมของเราเกลื่อนไปด้วยการเขียนซ้ำทั้งหมดจะผิดอย่างน่ากลัว (Netscape!)
Dave Mateer

1
Idigas มีความคิดที่ถูกต้องที่นี่ คุณมีฐานรหัสการทำงานที่ใช้งานได้มาหลายปีและการถอดความมันจะสร้างข้อบกพร่อง Plus Fortran เป็นภาษาง่าย ๆ ในการรับมันอาจจะน่าเกลียด แต่มันทำจากแนวคิดที่ชัดเจน เก็บรหัสอ้างอิงใน / ไปยังรหัสอื่น ๆ และอาจเขียนอินเตอร์เฟส C-style ที่ดีไปยัง Fortran และคุณจะพบรหัสที่จะพิสูจน์ได้อย่างน่าทึ่งในอนาคต (C-style เนื่องจากภาษาอื่นเกือบทั้งหมดมีกลไกในการโทร โค้ดที่มีอินเตอร์เฟส C-style)
anon

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

ว้าวฉันไม่รู้ว่ามีความรักมากมายรอบ ๆ FORTRAN ฉันต้องพัฒนาใน F77 เป็นเวลา 5 ปีและฉันก็ทนไม่ไหว
dodgy_coder

2
@dodgy_coder ยินดีที่ได้พัฒนาใน Fortran + .NET ในยุคเก้า เบต้าตัวแรกของ. NET ออกมาในปี 2000

10

ฉันสงสัยว่า Fortran จะตาย - มันมีมรดกที่ยิ่งใหญ่ของซอฟต์แวร์และ libs ที่เขียนไว้ในนั้นว่าผู้คนยังคงทำงานกับมันอยู่เพียงแค่ทำให้สถานการณ์นี้เสถียร ยิ่งไปกว่านั้นมันยังเป็นภาษาที่ดีมากหากคุณไม่ต้องการทำอะไรมากไปกว่าการบีบอัดตัวเลข - ไวยากรณ์นั้นสวยงามและสมเหตุสมผลมากบวกกับคอมไพเลอร์สามารถเดาได้ว่าเกิดอะไรขึ้น ดังนั้นจึงรับประกันได้ว่าเทคโนโลยีตัวเร่งความเร็วฮาร์ดแวร์ใหม่จะรองรับ C, Fortran และ OpenCL บางประเภท (เมื่อในที่สุดมันจะมาบรรจบกันกับสิ่งที่มั่นคง)

ดังนั้นฉันจะบอกว่าคุณควรแยกส่วนที่เป็นตัวเลขออกจากกันอย่างชัดเจนใน Fortran สร้างการเชื่อมโยงที่ชัดเจนและเขียนส่วนที่เหลือในสิ่งที่คุณต้องการ


ไม่ต้องพูดถึงว่าโครงการใหม่ใน Fortran ก็เริ่มต้นขึ้นในปัจจุบัน
โกง

ใช่แล้ว COBOL ของ Fortran ไม่เพียงรองรับเพราะนั่นคือสิ่งที่ผู้คนเรียนรู้เมื่อ 30 ปีก่อน (แม้ว่า IMO จะเป็นส่วนหนึ่งของมัน) การกระทืบหมายเลขไม่ใช่มือขวาของฉันแม้ว่าจะดีกว่าฉันก็ไม่รู้แน่นอน
Ben Brocka

1
ภาษาฟอร์แทรนยังคงใช้เวลาสิบปีในการหาจำนวนและการเพิ่มประสิทธิภาพที่เกี่ยวข้อง มันจะไม่ตายตลอดเวลาเร็ว ๆ นี้
Martin York

1
บทความปรากฏใน "การสื่อสารแห่ง ACM" เมื่อเร็ว ๆ นี้ทั้งหมดเกี่ยวกับ Fortran และวิธีการที่จะดำเนินต่อไปและไปกับการสร้างสรรค์สิ่งใหม่ ๆ ที่ต่อเนื่อง การรักษา (อย่างน้อยจำนวนส่วนที่กระทืบ) ของรหัสใน Fortran อาจเป็นไปได้ดี นอกจากนี้ยังช่วยหลีกเลี่ยง Netscape Syndrome (เขียนใหม่ = ข้อบกพร่องใหม่ = รอบเวลาขนาดใหญ่ = โกรธทุกคนที่เกี่ยวข้อง)
quick_now

1
คุณต้องการให้คนที่ไม่สนใจเลยใน Fortran แตะรหัส crunching ของคุณหรือไม่? ปัญหาใหญ่คือการทำให้แน่ใจว่าผลลัพธ์ยังคงถูกต้องหลังจากเขียนใหม่
Peter Smith

4

Python ได้รับแรงฉุดจำนวนมากในชุมชนการคำนวณทางวิทยาศาสตร์ (สำหรับมุมมองที่ค่อนข้างล้าสมัยให้ดูเล่ม 9 หมายเลข 3 ของ CiSE ) ฉันคิดว่าไฮบริดของ Python / Fortran เป็นวิธีที่ยอดเยี่ยมในการไป เพื่อที่จะใช้ประโยชน์จาก GPUs ทั้งหมดที่คุณสามารถใช้PyCUDAหรือPyOpenCL

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

ผลลัพธ์ที่ทรงพลังจริงๆของเรื่องนี้ก็คือเราสามารถเชื่อมโยง Python / Fortran code แบบไฮบริดได้ (ขนานกับPyClaw ) กับไลบรารี PETSc ขนานซึ่งสร้างขึ้นเป็นครั้งแรกที่ Clawpack แบบขนานที่ปรับขนาดได้ซึ่งทำงานได้ดีบนแกน 65K ทั้งหมดของรหัสที่ขนานว่าเราต้องเขียนอยู่ในน้อยกว่า 300 เส้นของงูใหญ่ ตอนนี้เรากำลังแก้ปัญหาที่ไม่สามารถแก้ไขได้ด้วยรหัสดั้งเดิม สิ่งสำคัญก็คือตอนนี้ผู้ใช้ใหม่สามารถหยิบโค้ดได้ง่ายขึ้นเนื่องจาก Python เป็นภาษาที่เข้าใจง่ายและเกือบทุกอย่างสามารถแก้ไขได้ในเวลาทำงานแทนที่จะรวบรวมเวลา

หากคุณต้องการดูรายละเอียดเพิ่มเติมของวิธีการและผลของเราเรามีกระดาษใน arXiv

ขอโทษสำหรับการโฆษณาด้วยตนเอง แต่ดูเหมือนว่าประสบการณ์ส่วนตัวของฉันจะเกี่ยวข้องกับที่นี่ หากคุณต้องการที่จะได้ยินความคิดอื่น ๆ อีกมากมายที่คุณสามารถโพสต์นี้ยังใหม่http://scicomp.stackexchange.com


1

ขณะนี้ฉันอยู่ในสถานการณ์ที่คล้ายกันมากกับเพื่อนของคุณ ฉันยังอยากที่จะ "ปรับปรุง" รหัสมรดก KLOC Fortran-77 ของฉัน 40 สิ่ง และถึงแม้ Fortran นั้นจะยังถือว่าเป็นราชาในแอปพลิเคชั่นที่มีการบีบอัดตัวเลข (สิ่งต่อไปนี้คือคุยโว -soh ดังนั้นทนกับฉัน)

เพียงเพราะ Fortran เป็นภาษาที่ดีที่สุดสำหรับรหัสตัวเลขไม่ได้หมายความว่าเราจะต้องแบกกระเป๋าใบใหญ่ของรหัสยุ่ง ๆ ที่ซับซ้อนกับเราตลอดเวลา (ใช่รหัส Fortran ผูกพันกับยุ่งโดยเฉพาะ Fortran-77 ที่เป็น ภาษาที่ไม่เกี่ยวข้องกับวิศวกรรมซอฟต์แวร์อย่างแท้จริงเมื่อมันข้าม KLOCs ที่แน่นอน) ผู้ที่สนับสนุน Fortran สำหรับการทำตัวเลขให้ลืมการสังเกตทั่วไปว่าเมื่อคุณทำการวิเคราะห์ประสิทธิภาพของรหัสดังกล่าวจะมีเพียง 5% หรือ 10% ของรหัสที่มีประสิทธิภาพสูงและ 90% ที่เหลือ + Fortran เป็นค่าใช้จ่ายที่ไร้ประโยชน์เพียง ที่นั่นเพื่อทำให้ชีวิตของคุณเป็น "วิศวกรซอฟต์แวร์" ที่มีชีวิต

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

ฉันจะไปอีกขั้นหนึ่ง แม้แต่ C (และ Fortran-90/95/2003) ก็ยังอยู่ในระดับต่ำเกินไปหากคุณต้องการอินเทอร์เฟซ "มนุษยธรรม" ที่ดีกับรหัสที่มีการบีบอัดตัวเลข ฉันกำลังคิดที่จะย้ายไปใช้ Python-Fortran-77 หรือ Python-C hybrid รหัสที่ 90% ของรหัสคือ Python (รวมถึง Numpy, Scipy, ความสามารถในการลงจุดและความหวานทั้งหมด) และเฉพาะประสิทธิภาพที่เข้มข้น 5% -10% ยังคงเป็นรหัส Fortran-77 หรือ C


1
"รหัส Fortran ถูกผูกให้ยุ่ง" ไม่ผู้เขียนโค้ดยุ่งจะเขียนโค้ดยุ่ง ๆ ในภาษาใด ๆ และการสนทนาก็เป็นจริง Kernighan และ Plauger ได้แสดงให้เห็นถึงวิธีการเขียน Fortran สะอาดปีที่ผ่านมา

0

ขณะนี้ฉันกำลังอยู่ในขั้นตอนการอัปเดตรหัสฐาน FORTRAN95 เก่าเพื่อใช้กับสภาพแวดล้อมอุตสาหกรรมที่ทันสมัยเนื่องจากเวอร์ชั่นก่อนหน้านี้จะทำงานบนเครื่อง Windows2000 ที่ล่าสุดเท่านั้น codebase ของ FORTRAN นั้นจะทำการบีบอัดตัวเลขจำนวนมากที่เกี่ยวข้องกับการจำลองการชลประทาน

ดังนั้นสิ่งที่ฉันทำคือแทนที่จะเขียน FORTRAN ใหม่ในภาษาที่ทันสมัยกว่าฉันเพียงแค่ใช้คอมไพเลอร์ทางการค้าที่เรียกว่าSilverfrost FTN95เพื่อรวบรวม FORTRAN codebase ไปยังไลบรารี. Net 4.0 ซึ่งฉันใช้เป็นแบ็คเอนด์ของแอปพลิเคชัน WPF . วิธีนี้ฉันจะไม่เสี่ยงต่อการนำบั๊กที่รู้เข้ามาในรหัสการจำลองและฉันกำลังทำให้มันทันสมัยขึ้นโดยการย้าย codebase ไปยังเฟรมเวิร์ก. Net 4.0 ดังนั้นมันจะทำงานบนสภาพแวดล้อมที่ทันสมัยกว่า

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

หวังว่า expieriance ของฉันจะช่วยได้ขอบคุณอเล็กซ์


0

ฉันเป็นผู้นำการพัฒนาโครงการตั้งแต่ปี 2544-2546 ซึ่งจัดทำแอปพลิเคชัน windows 100KLOC จาก FORTRAN ถึง C # มันเป็นแอพพลิเคชั่นที่มีการบีบอัดตัวเลขซึ่งมีการผูก GUI ที่กำหนดเองกับไลบรารี Win32 พอร์ตไปยัง C # และ WinForms ทำให้การจัดการโค้ดง่ายกว่ามากและทำให้ทุกคนมีสภาพแวดล้อมการพัฒนาที่สมบูรณ์ยิ่งขึ้นใน Visual Studio มีการต่อต้านเล็กน้อยในช่วงต้น (โดยเฉพาะอย่างยิ่งในแง่ของการจัดรูปแบบ) แต่ท้ายที่สุดมันก็คุ้มค่าแน่นอน

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

อีกเหตุผลที่ควรทำคือแน่นอนว่าผู้คนที่มีประสบการณ์ของ FORTRAN จะสามารถใช้งานโค้ดในระยะยาวได้เมื่อเทียบกับผู้พัฒนา C # นอกจากนี้ยังช่วยให้ขวัญกำลังใจของทีมทำงานในภาษาที่ทันสมัยและได้รับการสนับสนุนเป็นอย่างดี


0

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

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