Flang คอมไพเลอร์ Fortran ของ LLVM ออกรีลีสทางการครั้งแรก
(blog.llvm.org)- LLVM ได้รวมคอมไพเลอร์ Fortran ชื่อ Flang มาตั้งแต่ LLVM 11 ในปี 2020
- ชื่อไฟล์ปฏิบัติการช่วงแรกไม่ใช่
flangแต่เป็นflang-new - ใน LLVM 20 มีการเปลี่ยน
flang-newเป็นflangเพื่อสะท้อนว่า Flang มีความพร้อมในระดับที่ยอมรับได้แล้ว - หลังการพัฒนาต่อเนื่องมาหลายปี Flang ได้กลายเป็นคอมไพเลอร์ Fortran อย่างเป็นทางการ
ความสำคัญของ Fortran
- Fortran เริ่มต้นในทศวรรษ 1950 ในฐานะภาษาสำหรับแปลสูตรคำนวณ (Formula Translation)
- ถูกใช้อย่างแพร่หลายในงานคำนวณเชิงวิทยาศาสตร์ (เช่น การจำลองสภาพอากาศ พลศาสตร์ของไหล เคมีเชิงคำนวณ เป็นต้น)
- ช่วงหลังระบบนิเวศของ Fortran กลับมาคึกคักอีกครั้ง
- มีทั้ง Fortran package manager (fpm), standard library แบบไม่เป็นทางการ, LFortran และอื่น ๆ
- โค้ดมากกว่า 80% ที่รันบนซูเปอร์คอมพิวเตอร์ ARCHER2 เขียนด้วย Fortran
เหตุใดจึงต้องมีคอมไพเลอร์ Fortran ตัวใหม่
- คอมไพเลอร์ Fortran เดิมที่มีอยู่:
- Intel Fortran Compiler, NVIDIA HPC Compiler เป็นต้น
- คอมไพเลอร์โอเพนซอร์ส: GFortran
- พันธมิตรช่วงเริ่มต้นของโครงการ Flang ได้แก่ ห้องปฏิบัติการวิจัยแห่งชาติของสหรัฐฯ และ NVIDIA
- เป้าหมายคือ:
- เป็นโอเพนซอร์สและใช้ไลเซนส์ที่เหมาะกับการใช้งานเชิงพาณิชย์
- สร้างชุมชนนักพัฒนาคอมไพเลอร์ Fortran ที่มีความเคลื่อนไหว
- สนับสนุนการพัฒนา Fortran ด้วยเครื่องมือบนฐาน LLVM
- เป็นแพลตฟอร์มทดลองสำหรับข้อเสนอของมาตรฐานภาษาใหม่
- การมีหลายอิมพลีเมนเทชันช่วยลดปัญหาความเข้ากันได้และเปิดทางให้เกิดการปรับปรุง
ไทม์ไลน์ของ Flang
- 1989: ก่อตั้ง Portland Group (PGI)
- 2015: เริ่มโครงการ Classic Flang (นำโดย NVIDIA และห้องปฏิบัติการวิจัยแห่งชาติของสหรัฐฯ)
- 2017: ออกรีลีสแรกของ Classic Flang และเปลี่ยนเป็นโอเพนซอร์ส
- 2018: เริ่มเขียนฟรอนต์เอนด์ของ Classic Flang ใหม่เป็น F18
- 2019: F18 ถูกรวมเข้าเป็นส่วนหนึ่งของโครงการ LLVM
- 2020: เปิดตัวไดรเวอร์ใหม่ของ Flang คือ
flang-new - 2022: NVIDIA ส่ง FIR (Fortran IR) เข้าสู่ LLVM
- 2024: เปลี่ยนชื่อ
flang-newเป็นflang - 2025: มีไฟล์ปฏิบัติการ
flangรวมอยู่ใน LLVM 20.1
กระบวนการเปลี่ยนชื่อของ Flang
- มีการถกเถียงเรื่องการเปลี่ยนชื่อ Flang อยู่หลายครั้ง
- เกณฑ์ในการตัดสินใจได้แก่:
- แก้ปัญหาความสามารถหลักและปัญหาด้านประสิทธิภาพแล้ว
- ฟีเจอร์ภาษาที่ยังไม่สมบูรณ์ต้องแสดงข้อความผิดพลาดอย่างชัดเจน
- ต้องมีผลการเปรียบเทียบประสิทธิภาพกับคอมไพเลอร์ Fortran อื่นที่ดีเพียงพอ
- ยืนยันเสถียรภาพด้วยชุดทดสอบที่ครอบคลุมกว้างขวาง
- คำแนะนำจาก Chris Lattner ผู้ร่วมก่อตั้ง LLVM:
"จำเป็นต้องแก้ปัญหาชื่อชนกันระหว่าง Flang เดิมกับ Flang ใหม่"
- เดือนตุลาคม 2024 หลังชุมชนเห็นพ้องร่วมกัน จึงเปลี่ยนชื่อจาก
flang-newเป็นflangสำเร็จ
กระบวนการคอมไพล์ของ Flang และการนำ MLIR มาใช้
MLIR (Multi-Level Intermediate Representation)
- ใช้เพียง LLVM IR อย่างเดียวทำให้เก็บข้อมูลระดับสูงของภาษาไว้ได้ยาก
- MLIR ช่วยรักษาคุณลักษณะของภาษาระดับสูงและรองรับการปรับแต่งประสิทธิภาพได้
- Flang สร้าง FIR (Fortran IR) บนพื้นฐานของ MLIR
- FIR เก็บข้อมูลของ Fortran เช่น อาร์เรย์และชนิดข้อมูลไว้ได้
HLFIR (High Level FIR)
- เป็นรูปแบบการแสดงผลในระดับที่สูงกว่า FIR
- รองรับการปรับแต่งอาร์เรย์และไวยากรณ์ Fortran ขั้นสูง
ขั้นตอนการคอมไพล์
- ซอร์สโค้ด Fortran
- สร้าง MLIR (HLFIR + FIR)
- แปลง FIR
- แปลงเป็น LLVM IR
- Machine IR → แอสเซมบลี → ไฟล์ปฏิบัติการ
การรองรับ OpenMP ของ Flang
- OpenMP คือ API มาตรฐานสำหรับการเขียนโปรแกรมแบบขนาน
- Flang เพิ่ม dialect เฉพาะของ OpenMP ใน MLIR
- ใช้
OpenMPIRBuilderเพื่อแปลงไปเป็น LLVM IR - การอิมพลีเมนต์ OpenMP ของ Flang มีโครงสร้างคล้ายกับ Clang
การออกแบบไดรเวอร์ของ Flang
flang→ ไดรเวอร์ที่เป็นมิตรต่อผู้ใช้flang -fc1→ ไดรเวอร์ฟรอนต์เอนด์ที่เป็นมิตรต่อผู้พัฒนา- พัฒนาบนพื้นฐานของไลบรารี
clangDriverของ Clang - รองรับการขยายไปยังเป้าหมายและเครื่องมือต่าง ๆ ได้
การมีส่วนร่วมและเสียงตอบรับต่อ Flang
- Arm: พัฒนา HPC toolchain บนพื้นฐานของ Flang
- Fujitsu: ช่วยปรับปรุง Flang ผ่านชุดทดสอบ HPC
- Linaro: แก้ไขข้อบกพร่องโดยใช้ชุดทดสอบของ Fujitsu
- SciPy: การนำ Flang มาใช้ช่วยแก้ปัญหาการรองรับ Windows
- Barcelona Supercomputing Center: รองรับการเวกเตอร์ไรซ์ของ RISC-V และโมเดลขนานภายใน
- Chris Lattner:
"Flang คือสัญลักษณ์ของโมเดลความร่วมมือที่โครงการ LLVM มอบให้"
- AMD: กำลังพัฒนาคอมไพเลอร์ Fortran รุ่นถัดไปบนพื้นฐานของ Flang
วิธีร่วมพัฒนา Flang
- Flang เป็นโครงการโอเพนซอร์สที่ยังคงพัฒนาอย่างต่อเนื่อง
- สามารถทดลองใช้งานโดยตรงและส่งฟีดแบ็กได้
- มีหลายวิธีในการมีส่วนร่วม เช่น ส่งโค้ดหรือแก้ไขเอกสาร
- ปฏิบัติตามกระบวนการร่วมพัฒนามาตรฐานของ LLVM
ยังไม่มีความคิดเห็น