ในโปรแกรมปริญญาเอกวิทยาศาสตร์การคำนวณของเราเราทำงานเกือบเฉพาะใน C ++ และ Fortran ดูเหมือนว่าอาจารย์บางคนชอบมากกว่าคนอื่น ฉันสงสัยว่าอันไหนดีกว่าหรือในอันใดอันหนึ่งดีกว่าในบางกรณี
ในโปรแกรมปริญญาเอกวิทยาศาสตร์การคำนวณของเราเราทำงานเกือบเฉพาะใน C ++ และ Fortran ดูเหมือนว่าอาจารย์บางคนชอบมากกว่าคนอื่น ฉันสงสัยว่าอันไหนดีกว่าหรือในอันใดอันหนึ่งดีกว่าในบางกรณี
คำตอบ:
บ่อยครั้งที่ตัวเลือกขึ้นอยู่กับ (1) ปัญหาที่คุณพยายามแก้ไข (2) ทักษะที่คุณมีและ (3) คนที่คุณทำงานด้วย (เว้นแต่เป็นโครงการเดี่ยว) ฉันจะไป (3) กันสักครู่เพราะมันขึ้นอยู่กับสถานการณ์ของแต่ละคน
การพึ่งพาปัญหา: Fortran เก่งในการประมวลผลอาร์เรย์ หากปัญหาของคุณสามารถอธิบายได้ในแง่ของโครงสร้างข้อมูลอย่างง่ายและโดยเฉพาะอย่างยิ่งอาร์เรย์ Fortran ก็ปรับตัวได้ดี โปรแกรมเมอร์ของ Fortran ปิดท้ายด้วยการใช้อาร์เรย์แม้ในกรณีที่ไม่ชัดเจน (เช่นเพื่อแสดงกราฟ) C ++ เหมาะสำหรับโครงสร้างข้อมูลที่ซับซ้อนและมีพลวัตสูง
การพึ่งพาทักษะ: ต้องใช้ประสบการณ์การเขียนโปรแกรมมากขึ้นในการเขียนโปรแกรม C ++ ที่ดีกว่าการเขียนโปรแกรม Fortran ที่ดี หากคุณเริ่มต้นด้วยประสบการณ์การเขียนโปรแกรมเพียงเล็กน้อยและมีเวลามากพอที่จะเรียนรู้แง่มุมของงานของคุณคุณอาจได้รับผลตอบแทนจากการลงทุนการเรียนรู้ Fortran ที่ดีกว่าการเรียนรู้ C ++ แน่นอนว่าปัญหาของคุณเหมาะสมกับ Fortran
อย่างไรก็ตามมีการเขียนโปรแกรมมากกว่าแค่ Fortran และ C ++ ฉันขอแนะนำให้ทุกคนที่เข้าสู่วิทยาศาสตร์การคำนวณเพื่อเริ่มต้นด้วยภาษาระดับสูงแบบไดนามิกเช่น Python โปรดจำไว้เสมอว่าเวลาของคุณมีค่ามากกว่าเวลา CPU!
ฉันคิดว่าทั้ง C ++ และ Fortran นั้นดีพอและทำงานได้ดี
อย่างไรก็ตามฉันคิดว่า Fortran ดีกว่าสำหรับการคำนวณเชิงตัวเลขสำหรับอัลกอริทึมที่สามารถแสดงโดยใช้อาร์เรย์และไม่ต้องการโครงสร้างข้อมูลที่ซับซ้อนอื่น ๆ ดังนั้นในฟิลด์เช่นความแตกต่าง / องค์ประกอบ จำกัด ตัวแก้ PDE การคำนวณโครงสร้างอิเล็กทรอนิกส์ Fortran เป็นภาษาเฉพาะโดเมน โดยเฉพาะฉันคิดว่าการเขียนโปรแกรมที่รวดเร็วใน Fortran ง่ายกว่าใน C ++ โดยนักวิทยาศาสตร์ (ไม่จำเป็นต้องเป็นผู้เชี่ยวชาญด้านวิทยาศาสตร์คอมพิวเตอร์)
C ++ เป็นภาษาวัตถุประสงค์ทั่วไปดังนั้นเราจึงสามารถแสดงอัลกอริทึมใด ๆ ในนั้นและเป็นวิธีที่ดีที่สุดสำหรับอัลกอริธึมที่ไม่สามารถแสดงผลได้โดยใช้อาร์เรย์จากเขต HPC อาจเป็นกราฟเครื่องกำเนิดตาข่ายการจัดการสัญลักษณ์และอื่น ๆ
นอกจากนี้ยังเป็นไปได้ที่จะเขียนอัลกอริธึมอาเรย์ใน C ++ แต่จากประสบการณ์ของฉันมันต้องใช้ความรู้ด้านวิทยาการคอมพิวเตอร์มากขึ้นและโดยทั่วไปก็ทำงานได้มากกว่าเดิม (เช่นเราต้องการสร้างหรือนำคลาสเรียนกลับมาใช้ใหม่เพื่อจัดการอาเรย์ ห้องสมุดเช่น Teuchos จาก Trilinos) ผู้ที่ไม่ใช่ผู้เชี่ยวชาญมักจะเขียนโปรแกรม Fortran ที่ค่อนข้างดี แต่โปรแกรม C ++ ที่น่ากลัว (พูดจากประสบการณ์ของตัวเอง)
ข้อจำกัดความรับผิดชอบ: ฉันชอบ Fortran มากและฉันชอบมากกว่า C ++ สำหรับการคำนวณเชิงตัวเลข ฉันใช้เวลาเขียนโปรแกรม C ++ มากกว่า 2 ปีทุกวันและตั้งโปรแกรมเกือบหนึ่งปีใน Fortran สมัยใหม่ทุกวัน (ในขอบเขตองค์ประกอบ จำกัด ) ฉันใช้ Python และ Cython เป็นจำนวนมากเช่นกัน
ฉันยังโยนสองเซ็นต์ของฉันในสาย แต่ฉันเพิ่งเห็นหัวข้อนี้และฉันรู้สึกว่าสำหรับลูกหลานมีบางจุดที่ต้องทำอย่างยิ่ง
โปรดสังเกตว่าฉันจะพูดเกี่ยวกับ C ไม่ใช่ C ++ ทำไม? มิฉะนั้นจะเป็นแอปเปิ้ลและส้มเพื่อเปรียบเทียบภาษาเชิงวัตถุที่มีการพิมพ์แบบไดนามิกเต็มรูปแบบกับบางสิ่งที่คงที่เท่ากับ Fortran ใช่การใช้งานที่ทันสมัยของมาตรฐาน Fortran ล่าสุดสามารถทำได้มากกว่านั้น แต่มีเพียงไม่กี่คนที่ใช้งานจริงและเมื่อเราพูดถึง Fortran เราคิดว่าภาษาที่เรียบง่ายคงที่และมีความจำเป็น นั่นคือที่ C เกินไปดังนั้นฉันจะแทนที่ C ด้วย C ++ สำหรับต่อไปนี้
ก่อนอื่นการอภิปรายของ Fortran / C ที่มีคอมไพเลอร์ที่ดีกว่านั้นคือการพิจารณา คอมไพเลอร์ C / Fortran เฉพาะเป็นเรื่องของอดีต ทั้ง gcc / gfortran และ icc / ifc เป็นเพียงส่วนหน้าที่แตกต่างกันไปเป็น back-end เดียวกันนั่นคือโปรแกรมของคุณจะถูกแปลงเป็นคำอธิบายที่เป็นนามธรรมโดย front-end จากนั้นปรับให้เหมาะสมและประกอบโดยส่วนท้าย ถ้าคุณเขียนความหมายรหัสเดียวกันใน Fortran หรือใน C คอมไพเลอร์จะสร้างแอสเซมบลีเดียวกันซึ่งจะทำงานได้เร็วในทั้งสองกรณี
ตอนนี้นำไปสู่จุดที่สองของฉัน: ทำไมเรายังเห็นความแตกต่าง ปัญหาคือการเปรียบเทียบส่วนใหญ่ทำโดยโปรแกรมเมอร์ Fortran ลองอะไรใน C หรือในทางกลับกัน เคยสังเกตไหมว่าผู้แต่งหรือกวีส่วนใหญ่ชอบที่จะเขียนในภาษาของตัวเอง? คุณต้องการที่จะเขียนบทกวีในภาษาที่คุณไม่มั่นใจอย่างสมบูรณ์หรือที่บ้าน? ไม่แน่นอน ... ฉันคิดว่า C เป็นภาษาการเขียนโปรแกรม "ดั้งเดิม" ของฉัน อย่างไรก็ตามฉันใช้เวลาสามปีในการทำงานในกลุ่มที่ใช้ Fortran เพียงอย่างเดียวซึ่งฉันมีความคล่องแคล่วในระดับหนึ่ง อย่างไรก็ตามฉันจะไม่เขียนอะไรด้วยตัวเองใน Fortran เนื่องจากฉันรู้สึกสะดวกสบายกับ C และด้วยเหตุนี้โค้ดผลลัพธ์จะดีขึ้นไม่ว่าคุณจะกำหนดว่าอย่างไร
ดังนั้นความแตกต่างที่สำคัญคือโปรแกรมเมอร์ไม่ใช่ภาษา ดังนั้นจึงไม่มีความแตกต่าง? ก็ไม่มาก นี่คือตัวอย่างบางส่วน:
SIMD: ไม่ว่าจะเป็น SSE, SSE3 หรือ AltiVec ถ้าคุณต้องการที่จะใช้พวกเขาใน Fortran คุณหวังที่ดีขึ้นและอธิษฐานว่าคอมไพเลอร์คาดเดาว่าสิ่งที่คุณต้องการและไม่ได้ดังนั้น โชคดี. ใน C คุณมักจะมีฟังก์ชั่นที่แท้จริงสำหรับแต่ละสถาปัตยกรรมหรือเมื่อเร็ว ๆ นี้โดยทั่วไปSIMD ประเภทเวกเตอร์ใน GCC คอมไพเลอร์ของ Fortran ส่วนใหญ่จะใช้คำสั่ง SIMD เท่านั้นในการคลี่ลูป แต่ถ้าคุณมีเคอร์เนลที่ทำงานกับเวกเตอร์ข้อมูลสั้น ๆ ในลักษณะที่ไม่ชัดเจนผู้รวบรวมอาจจะมองไม่เห็น
สถาปัตยกรรมฮาร์ดแวร์ที่แตกต่าง: สถาปัตยกรรม CUDA ทั้งหมดถูกสร้างขึ้นรอบ ๆ เมล็ดในซีใช่แล้วตอนนี้พอร์ตแลนด์กรุ๊ปมีคอมไพเลอร์ Fortran ที่มีความสามารถในการใช้ CUDAด้วย แต่มันเป็นเชิงพาณิชย์และที่สำคัญที่สุดไม่ใช่จาก NVIDIA เช่นเดียวกันกับ OpenCL ซึ่งสิ่งที่ดีที่สุดที่ฉันสามารถหาได้คือโครงการล่าสุดซึ่งรองรับการโทรพื้นฐานเพียงไม่กี่ครั้งเท่านั้น
การเขียนโปรแกรมแบบขนาน: ใช่ทั้ง MPI และ OpenMP ทำงานได้ดีกับ C และ Fortran อย่างไรก็ตามหากคุณต้องการควบคุมเธรดของคุณอย่างแท้จริงเช่นถ้าคุณมีการคำนวณหน่วยความจำที่แชร์แบบไดนามิกเต็มรูปแบบคุณจะอยู่ในความหนาวเย็นด้วย Fortran ใน C คุณมี pthreads มาตรฐานซึ่งในขณะที่ไม่อบอุ่นและคลุมเครือจะยังคงนำคุณผ่านพายุ โดยทั่วไปการคำนวณส่วนใหญ่ที่อาศัยการเข้าถึงระบบปฏิบัติการเช่นเธรดกระบวนการระบบไฟล์ ฯลฯ ... จะได้รับการบริการที่ดีขึ้นด้วย C. Oh และไม่พยายามทำเครือข่ายของคุณเองกับ Fortran
ใช้งานง่าย: Fortran อยู่ใกล้กับ Matlab มากกว่า C เมื่อคุณได้รับคำหลักที่แตกต่างกันทั้งหมดและวิธีการประกาศตัวแปรแล้วโค้ดที่เหลือจะมีลักษณะเหมือน Matlab ทำให้ผู้ใช้สามารถเข้าถึงได้มากขึ้นด้วยประสบการณ์การเขียนโปรแกรมที่ จำกัด
ความสามารถในการทำงานร่วมกัน: เมื่อคุณสร้างโครงสร้างใน C โครงร่างของข้อมูลจริงจะตรงไปตรงมาและไม่แน่นอน ใน Fortran ถ้าคุณใช้อาร์เรย์ตัวชี้หรือข้อมูลที่มีโครงสร้างโครงร่างที่แท้จริงของข้อมูลนั้นขึ้นอยู่กับการคอมไพเลอร์อย่างยิ่งไม่ใช่ตรงไปข้างหน้าและมักจะไม่มีเอกสารทั้งหมด คุณสามารถโทรหา C จาก Fortran และในทางกลับกัน แต่อย่าเริ่มคิดว่ามันอาจเป็นเรื่องง่ายที่จะส่งอะไรมากกว่าอาร์เรย์คงที่จากที่หนึ่งไปยังอีกที่หนึ่งและกลับมา
ทั้งหมดนี้เป็นสิ่งที่ค่อนข้างเกินบรรยาย แต่เป็นคอมพิวเตอร์ประสิทธิภาพสูงที่เรากำลังพูดถึงใช่มั้ย หากคุณไม่สนใจวิธีการใช้ประโยชน์จากกระบวนทัศน์ฮาร์ดแวร์พื้นฐานเช่นการนำไปใช้และ / หรือการพัฒนาอัลกอริธึมที่ดีที่สุดสำหรับหน่วยความจำที่แชร์ / กระจาย, เธรด, เวกเตอร์ SIMD, GPUs ที่ใช้ SIMT และอื่น ๆ แค่ทำคณิตศาสตร์บนคอมพิวเตอร์
สิ่งนี้ได้นานขึ้นกว่าที่ฉันจะได้รับดังนั้นนี่เป็นบทสรุป - ชุดข้อความนำกลับบ้านที่แปลก ๆ :
จาก 15 ปีของการคิดเกี่ยวกับซอฟต์แวร์ทางวิทยาศาสตร์: หากโค้ดของคุณทำงานเร็วขึ้น 25% เพราะคุณเขียนใน Fortran แต่ใช้เวลาในการเขียนนานถึง 4 เท่า (ไม่มี STL ความยากในการใช้โครงสร้างข้อมูลที่ซับซ้อน ฯลฯ ) Fortran จะชนะก็ต่อเมื่อคุณใช้นิ้วโป้งนิดหน่อยในแต่ละวันและรอให้การคำนวณของคุณเสร็จสิ้น ระบุว่าสำหรับเราเกือบทุกคนสิ่งที่มีค่าที่สุดคือเวลาของเราเองข้อสรุปคือ: ใช้ภาษาที่ช่วยให้คุณพัฒนาแก้จุดบกพร่องและทดสอบรหัสของคุณได้เร็วที่สุดโดยไม่สนใจว่าอาจช้ากว่าถ้าเป็นไปได้ คุณเขียนมันใน Fortran
วิธีการของฉันคือการใช้ C ++ สำหรับทุกสิ่งยกเว้นเมล็ดคำนวณซึ่งโดยปกติแล้วจะเขียนด้วยภาษาที่ดีที่สุดในการประกอบ นี่เป็นการซื้อประสิทธิภาพทั้งหมดของวิธีการ HPC แบบดั้งเดิม แต่ช่วยให้คุณสามารถลดความซับซ้อนของอินเทอร์เฟซได้เช่นโดยการใส่เมล็ดในการคำนวณมากเกินไปเช่น SGEMM / DGEMM / CGEMM / ZGEMM ให้กลายเป็นรูทีนเดียว เห็นได้ชัดว่าระดับนามธรรมสามารถยกสูงขึ้นได้โดยหลีกเลี่ยงพอยน์เตอร์ดิบและเปลี่ยนเป็นคลาสทึบแสง แต่มันเป็นขั้นตอนแรกที่ดี
ฉันพบข้อเสียที่ใหญ่ที่สุดของ C ++ ที่จะเพิ่มเวลาในการรวบรวม แต่ในประสบการณ์ของฉันการประหยัดเวลาในการพัฒนามากกว่าที่จะชดเชย ข้อเสียอีกอย่างคือคอมไพเลอร์ C ++ ของผู้ขายมักจะมีข้อบกพร่องมากกว่าผู้ขายคอมไพเลอร์ C และ Fortran ในปีที่ผ่านมาฉันคิดว่าฉันพบข้อบกพร่องเกือบสิบข้อในคอมไพเลอร์ C ++
จากทั้งหมดที่กล่าวมาฉันคิดว่าการยกเลิกแพ็คเกจทางวิทยาศาสตร์ที่เขียนในภาษาระดับต่ำ (และ Fortran) คือการลังเลที่จะเปิดเผยส่วนต่อประสานที่สะดวกสำหรับโครงสร้างข้อมูลที่มีความซับซ้อน: คนส่วนใหญ่พึงพอใจกับอินเทอร์เฟซ BLAS ของ Fortran พอยน์เตอร์และมิติชั้นนำเพื่ออธิบายการฝึกอบรม แต่มีเพียงไม่กี่คนที่ยืนยันว่าอินเทอร์เฟซตัวแก้ปัญหาแบบกระจัดกระจายโดยตรงจำนวน 40 Fortran เป็นสิ่งที่ใกล้เคียงกับความสะดวกสบาย (เทียบกับ UHM, SuperLU, PETSc และ Trilinos)
โดยสรุปฉันโต้เถียงสำหรับการใช้แอสเซมบลีสำหรับเมล็ดคำนวณระดับต่ำ แต่ภาษาระดับสูงกว่าสำหรับทุกสิ่งทุกอย่างโดยเฉพาะอย่างยิ่งเมื่อทำงานบนโครงสร้างข้อมูลที่ไม่น่าสนใจ
ตั้งแต่ฉันใหม่ที่นี่ฉันได้ดูคำถามเก่า ๆ และพบคำถามนี้ หวังว่ามันคงเป็นเรื่องต้องห้ามที่จะตอบคำถามเก่า ๆ !
เนื่องจากไม่มีใครพูดถึงเรื่องนี้ฉันคิดว่าฉันจะ Fortran 2003 ได้รับการสนับสนุนอย่างเต็มที่จากคอมไพเลอร์หลักส่วนใหญ่ (intel, ibm, cray, NAG, PCG) แม้ gcc ด้วยรีลีสใหม่ล่าสุด (เร็ว ๆ นี้) 4.7 Fortran 2003 (และ 2008) เป็นภาษาเชิงวัตถุแม้ว่าจะมีความละเอียดมากกว่า C ++ เล็กน้อย สิ่งหนึ่งที่ฉันคิดว่าดีเกี่ยวกับ Fortran ก็คือความจริงที่ว่าคณะกรรมการมาตรฐานเห็นการคำนวณทางวิทยาศาสตร์ในฐานะผู้ชมหลัก (ฉันขอบคุณ Damian Rouson ที่ชี้ให้ฉันเห็นสิ่งนี้ในวันอื่น ๆ )
ฉันนำสิ่งนี้ทั้งหมดมาให้เพื่อไม่ให้โปรแกรมเมอร์ C ++ กลายเป็นโปรแกรมเมอร์ของ Fortran แต่เพื่อให้คน Fortran รู้ว่าพวกเขามีตัวเลือกเพิ่มเติมนอกเหนือจากการเปลี่ยนเป็น C ++ หรือเลียนแบบแนวคิดเชิงวัตถุใน Fortran 90/95
ข้อแม้หนึ่งที่ฉันจะเพิ่มคือมีค่าใช้จ่ายในการตกเลือดของสิ่งที่นำไปใช้ในคอมไพเลอร์ หากคุณทำโครงการสำคัญใน Fortran 2003 ตอนนี้คุณจะเจอข้อผิดพลาดและจำเป็นต้องปรับปรุงคอมไพเลอร์ของคุณอย่างต่อเนื่อง (โดยเฉพาะถ้าคุณใช้ gcc) แม้ว่าสิ่งนี้จะดีขึ้นอย่างมากในช่วงสองสามเดือนที่ผ่านมา!
ปัญหาของ C ++ คือคุณมีโอกาสมากมายที่จะทำลายประสิทธิภาพการทำงานตัวอย่างเช่นโดยการใช้ STL ข้อยกเว้นคลาส (ปัญหาค่าโสหุ้ยเสมือนจริงและการจัดตำแหน่ง), ตัวดำเนินการโอเวอร์โหลด (เทมเพลตใหม่ / การลบซ้ำซ้อน) หรือเทมเพลต ดูเหมือนอ่อนโยน แต่คุณสามารถเสียเวลาด้วยวิธีนี้)
อย่างไรก็ตามยิ่งคุณเข้าถึงไลบรารีทั่วไปได้มากขึ้นและอาจทำให้มองเห็นโค้ดของคุณได้ดีขึ้น (แม้ว่านี่จะขึ้นอยู่กับฟิลด์และคุณยังคงมี C บริสุทธิ์อยู่) และคุณยังสามารถชดเชยการขาดความยืดหยุ่นของ Fortran โดยการห่อโค้ดในภาษาสคริปต์เช่น R, Lush, Matlab / Scilab หรือแม้แต่ Python, Ruby หรือ Lua
ข้อเท็จจริงสามประการ:
อาร์เรย์ N-style ในแบบ F77 ใน C: ไม่มีปัญหาในการใช้CnD (ปลั๊กไร้ยางอาย, เป็นที่ยอมรับ)
ระบบโมดูลของ F90 ออกแบบมาไม่ดีและไม่เอื้ออำนวยต่อการสร้างสภาพแวดล้อม (ชื่อโมดูลไม่ตรงกับชื่อไฟล์เช่น)
หนึ่งความประทับใจส่วนตัว:
transfer()
เรามาที่นี่)Fortran เหมาะสำหรับการคำนวณแบบอาเรย์ / เมทริกซ์และเป็นความเจ็บปวดอย่างละเอียดในการทำงานกับการแยกวิเคราะห์ข้อความทุกประเภท C และ C ++ อาจไม่ตรงกับ Fortran ในการคำนวณเชิงตัวเลข (ใกล้เคียง) แต่ฉันคิดว่ามันง่ายกว่ามากในการประมวลผลข้อความและจัดการข้อมูล (เช่นโครงสร้างข้อมูลที่กำหนดเอง) กับ C / C ++
อย่างที่คนอื่น ๆ พูดถึงอย่านับภาษาที่แปลแบบไดนามิก (Python และ al) พวกเขาอาจไม่ให้ความเร็วในการหลอมละลายของฟอร์แมนล่วงหน้า แต่พวกเขาให้ความสำคัญกับการแก้ปัญหาการคำนวณของคุณมากกว่ารายละเอียดทั้งหมดของการนำไปใช้ บ่อยครั้งที่คุณสามารถใช้วิธีแก้ปัญหาใน Python และหากประสิทธิภาพไม่เป็นที่ยอมรับให้ทำโปรไฟล์บางอย่างระบุพื้นที่ปัญหาและปรับรหัสให้เหมาะสมโดยใช้ Cython หรือปรับใช้โปรแกรมทั้งหมดในภาษาที่รวบรวมใหม่ เมื่อคุณมีตรรกะการแก้ปัญหาที่มีเนื้อออกส่วนที่เหลือเป็นเพียงการดำเนินการและมีความเข้าใจที่ดีของการคำนวณพื้นฐานควรตรงไปตรงมาเพื่อแสดงในภาษาการเขียนโปรแกรมที่หลากหลาย
ฉันกำลังทำงานในห้องแล็บแห่งชาติแห่งหนึ่ง คนส่วนใหญ่ที่อยู่รอบตัวฉันเป็นวิศวกรเครื่องกล การแชทกับคนในกลุ่ม HPC พวกเขาส่วนใหญ่ใช้ Linux และ C ++ เป็นส่วนใหญ่ กลุ่มที่ฉันใช้อยู่ในปัจจุบันส่วนใหญ่จะเป็นแอปพลิเคชันเดสก์ท็อปและเราใช้ Windows และเรียงลำดับจากมากไปน้อย: C #, FORTRAN, Python, VBA และ VB (6 ไม่ใช่. NET) บางส่วนของการจำลองเครื่องมือที่เราใช้ถูกเขียนขึ้นในห้องปฏิบัติการระดับชาติอื่น ๆ ใน FORTRAN
ขออภัยที่ขุดเธรดเก่า แต่ดูเหมือนว่าในปี 2015 ฟอร์แทรนยังถูกใช้งานอย่างมาก
ฉันเพิ่งเจอรายการนี้ ( ลิงค์สำรอง) ซึ่งโดยทั่วไปแล้วเป็นรายการของรหัส 13 รหัสที่ได้รับการอนุมัติจากโรงงาน OCLF ของ DOE เพื่อทำงานบนเครื่อง 300-petaFLOPS Summit ซึ่งจะให้บริการแก่นักวิจัยในปี 2018 ฉันพยายามค้นหาภาษาหลักที่ใช้ สำหรับรหัส (ตามการค้นหา google ด่วน) และนี่คือสิ่งที่ฉันพบ:
XGC Fortran
SPECFEM Fortran
ACME Fortran (Bunch of climate codes)
DIRAC Fortran (Mostly)
FLASH Fortran
GTC Fortran
HACC C/C++
LS-DALTON Fortran (some C)
NAMD C/C++
NUCCOR Fortran
NWCHEM Fortran
QMCPACK C++
RAPTOR Fortran
ดังนั้นจาก 13 รหัสอย่างน้อย 10 (ขึ้นอยู่กับการค้นหาอย่างรวดเร็วของฉัน) ดูเหมือนจะเขียนใน Fortran ไม่เลวสำหรับภาษาเก่า 50 ปี
หมายเหตุ: ฉันทราบดีว่าการเปรียบเทียบภาษานั้นไร้ประโยชน์ แต่เมื่อพิจารณาจากจำนวนผู้ใช้ (โดยเฉพาะผู้ใช้ C ++) ที่ Fortran ที่ไม่ดีฉันคิดว่ามันคุ้มค่าที่จะพูดถึงมัน
สิ่งที่แจ็คพีฉันคิดว่าพยายามพูดคือคุณควรมิกซ์แอนด์แมทช์ ซอฟต์แวร์ที่ดีมีการจัดเรียงอย่างระมัดระวัง เลเยอร์ที่แตกต่างกันอาจแมปกับภาษาที่ต่างกันอย่างเป็นธรรมชาติหรือมีประสิทธิภาพมากกว่า คุณควรเลือกภาษาที่เหมาะสมที่สุดสำหรับแต่ละเลเยอร์ คุณควรเข้าใจด้วยว่าภาษาสามารถทำงานร่วมกันได้อย่างไรซึ่งอาจส่งผลต่อภาษาที่คุณเลือกสำหรับเลเยอร์ใด
คำถามที่ดีกว่าคือตัวอย่างของซอฟต์แวร์ที่ออกแบบมาอย่างดีเยี่ยมที่ควรค่าแก่การศึกษาเพื่อเรียนรู้เกี่ยวกับวิธีการออกแบบซอฟต์แวร์ที่มีเลเยอร์