- LLVM은 2020년 LLVM 11에서부터 Fortran 컴파일러 Flang을 포함해 옴
- 초기 실행 파일 이름은 flang이 아닌 flang-new였음
- LLVM 20에서 flang-new를 flang으로 변경하면서 Flang의 성숙함을 인정
- Flang은 수년간의 개발 끝에 공식 Fortran 컴파일러로 자리 잡음
Fortran의 중요성
- Fortran은 1950년대 수식 번역(Formula Translation) 언어로 시작
- 과학 계산에서 널리 사용됨 (기상 모델링, 유체 역학, 계산 화학 등)
- 최근 Fortran 생태계가 다시 활성화됨
- Fortran 패키지 매니저(fpm), 비공식 표준 라이브러리, LFortran 등 출현
- ARCHER2 슈퍼컴퓨터에서 실행되는 코드의 80% 이상이 Fortran으로 작성됨
새로운 Fortran 컴파일러가 필요한 이유
- 기존 Fortran 컴파일러:
- 인텔 Fortran 컴파일러, NVIDIA HPC 컴파일러 등
- 오픈소스 컴파일러: GFortran
- Flang 프로젝트 초기 파트너: 미국 국립 연구소 및 NVIDIA
- 목표:
- 오픈소스이자 상업적 사용에 적합한 라이선스 제공
- 활발한 Fortran 컴파일러 개발자 커뮤니티 구축
- LLVM 기반 도구로 Fortran 개발 지원
- 새로운 언어 표준 제안을 위한 실험 플랫폼 제공
- 여러 구현이 존재하면 호환성 문제 완화 및 개선 가능
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년: LLVM 20.1에서 flang 실행 파일 포함
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 변환
- 머신 IR → 어셈블리 → 실행 파일
Flang의 OpenMP 지원
- OpenMP는 병렬 프로그래밍을 위한 표준 API
- Flang은 MLIR에 OpenMP 전용 dialect 추가
-
OpenMPIRBuilder를 사용해 LLVM IR로 변환
- Flang의 OpenMP 구현은 Clang과 구조적으로 유사
Flang의 드라이버 설계
-
flang → 사용자 친화적 드라이버
-
flang -fc1 → 개발자 친화적 프론트엔드 드라이버
- Clang의 clangDriver 라이브러리 기반 구현
- 다양한 타겟 및 도구 지원 가능
Flang의 기여 및 반응
Flang 기여 방법
- Flang은 오픈소스 프로젝트로 지속적인 발전 중
- 직접 사용해 보고 피드백 제공 가능
- 코드 기여, 문서 수정 등 다양한 기여 방법 존재
- LLVM의 표준 기여 프로세스를 따름