- LLVM đã đưa trình biên dịch Fortran Flang vào từ LLVM 11 năm 2020
- Tên tệp thực thi ban đầu là
flang-new, không phải flang
- Trong LLVM 20,
flang-new được đổi thành flang, thừa nhận mức độ trưởng thành của Flang
- Sau nhiều năm phát triển, Flang đã trở thành trình biên dịch Fortran chính thức
Tầm quan trọng của Fortran
- Fortran bắt đầu từ những năm 1950 như ngôn ngữ Formula Translation
- Được sử dụng rộng rãi trong tính toán khoa học (mô hình khí tượng, động lực học chất lưu, hóa học tính toán, v.v.)
- Gần đây hệ sinh thái Fortran đang sôi động trở lại
- Xuất hiện Fortran package manager (fpm), thư viện chuẩn không chính thức, LFortran, v.v.
- Hơn 80% mã chạy trên siêu máy tính ARCHER2 được viết bằng Fortran
Vì sao cần một trình biên dịch Fortran mới
- Các trình biên dịch Fortran hiện có:
- Intel Fortran Compiler, NVIDIA HPC Compilers, v.v.
- Trình biên dịch mã nguồn mở: GFortran
- Đối tác ban đầu của dự án Flang: các phòng thí nghiệm nghiên cứu quốc gia của Mỹ và NVIDIA
- Mục tiêu:
- Cung cấp giấy phép mã nguồn mở phù hợp cho cả sử dụng thương mại
- Xây dựng cộng đồng nhà phát triển trình biên dịch Fortran năng động
- Hỗ trợ phát triển Fortran bằng các công cụ dựa trên LLVM
- Cung cấp nền tảng thử nghiệm cho các đề xuất tiêu chuẩn ngôn ngữ mới
- Sự tồn tại của nhiều cách triển khai giúp giảm vấn đề tương thích và thúc đẩy cải tiến
Dòng thời gian của Flang
- 1989: Portland Group (PGI) được thành lập
- 2015: Dự án Classic Flang bắt đầu (do NVIDIA và các phòng thí nghiệm quốc gia của Mỹ dẫn dắt)
- 2017: Bản phát hành đầu tiên của Classic Flang và chuyển sang mã nguồn mở
- 2018: Bắt đầu viết lại frontend của Classic Flang thành F18
- 2019: F18 được tích hợp vào dự án LLVM
- 2020: Giới thiệu driver mới
flang-new của Flang
- 2022: NVIDIA đóng góp FIR (Fortran IR) cho LLVM
- 2024:
flang-new được đổi tên thành flang
- 2025: LLVM 20.1 bao gồm tệp thực thi
flang
Quá trình đổi tên của Flang
- Việc đổi tên Flang đã được thảo luận nhiều lần
- Tiêu chí quyết định:
- Giải quyết các vấn đề chính về tính năng và hiệu năng
- Với các tính năng ngôn ngữ chưa hoàn thiện, phải đưa ra thông báo lỗi rõ ràng
- Cần có kết quả tốt khi so sánh hiệu năng với các trình biên dịch Fortran khác
- Xác nhận độ ổn định thông qua bộ kiểm thử diện rộng
- Lời khuyên từ đồng sáng lập LLVM Chris Lattner:
> "Cần giải quyết vấn đề xung đột tên giữa Flang cũ và Flang mới"
- Tháng 10/2024, sau khi cộng đồng đạt đồng thuận, việc đổi tên
flang-new → flang đã hoàn tất
Quy trình biên dịch của Flang và việc đưa MLIR vào
MLIR(Multi-Level Intermediate Representation)
- Chỉ với LLVM IR thì khó bảo toàn thông tin ngôn ngữ ở mức cao
- MLIR có thể giữ lại đặc tính của ngôn ngữ bậc cao và cho phép tối ưu hóa
- Flang xây dựng FIR (Fortran IR) trên nền tảng MLIR
- FIR bảo toàn thông tin như mảng, kiểu dữ liệu của Fortran
HLFIR(High Level FIR)
- Biểu diễn ở mức cao hơn của FIR
- Hỗ trợ tối ưu hóa mảng và cú pháp Fortran nâng cao
Các bước biên dịch
- Mã nguồn Fortran
- Tạo MLIR (HLFIR + FIR)
- Chuyển đổi FIR
- Chuyển đổi sang LLVM IR
- Machine IR → assembly → tệp thực thi
Hỗ trợ OpenMP của Flang
- OpenMP là API tiêu chuẩn cho lập trình song song
- Flang bổ sung dialect chuyên dụng cho OpenMP trong MLIR
- Chuyển đổi sang LLVM IR bằng
OpenMPIRBuilder
- Triển khai OpenMP của Flang có cấu trúc tương tự Clang
Thiết kế driver của Flang
flang → driver thân thiện với người dùng
flang -fc1 → driver frontend thân thiện với nhà phát triển
- Được triển khai dựa trên thư viện
clangDriver của Clang
- Có thể hỗ trợ nhiều target và công cụ khác nhau
Đóng góp và phản hồi về Flang
- Arm: phát triển toolchain HPC dựa trên Flang
- Fujitsu: đóng góp cải thiện Flang thông qua bộ kiểm thử HPC
- Linaro: sửa lỗi thông qua bộ kiểm thử của Fujitsu
- SciPy: giải quyết vấn đề hỗ trợ Windows nhờ áp dụng Flang
- Barcelona Supercomputing Center: hỗ trợ vector hóa RISC-V và mô hình song song nội bộ
- Chris Lattner:
> "Flang là biểu tượng cho mô hình cộng tác mà dự án LLVM mang lại"
- AMD: đang phát triển trình biên dịch Fortran thế hệ tiếp theo dựa trên Flang
Cách đóng góp cho Flang
- Flang là dự án mã nguồn mở đang tiếp tục phát triển
- Có thể trực tiếp sử dụng và gửi phản hồi
- Có nhiều cách đóng góp như đóng góp mã nguồn, chỉnh sửa tài liệu, v.v.
- Tuân theo quy trình đóng góp tiêu chuẩn của LLVM
Chưa có bình luận nào.