• 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 ขั้นสูง

ขั้นตอนการคอมไพล์

  1. ซอร์สโค้ด Fortran
  2. สร้าง MLIR (HLFIR + FIR)
  3. แปลง FIR
  4. แปลงเป็น LLVM IR
  5. 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

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น