GN⁺: LLVM Fortran 컴파일러 Flang 첫번째 공식 릴리즈
(blog.llvm.org)- 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의 이름 변경은 여러 차례 논의되었음
- 결정 기준:
- 주요 기능 및 성능 문제 해결
- 미완성 언어 기능은 명확한 오류 메시지 출력
- 다른 Fortran 컴파일러와 성능 비교에서 우수한 결과 필요
- 광범위한 테스트 스위트를 통한 안정성 확인
- LLVM 공동 창립자 Chris Lattner의 조언:
"기존 Flang과 새로운 Flang의 이름 충돌 문제 해결 필요"
- 2024년 10월, 커뮤니티 합의 후
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 변환
- 머신 IR → 어셈블리 → 실행 파일
Flang의 OpenMP 지원
- OpenMP는 병렬 프로그래밍을 위한 표준 API
- Flang은 MLIR에 OpenMP 전용 dialect 추가
-
OpenMPIRBuilder
를 사용해 LLVM IR로 변환 - Flang의 OpenMP 구현은 Clang과 구조적으로 유사
Flang의 드라이버 설계
-
flang
→ 사용자 친화적 드라이버 -
flang -fc1
→ 개발자 친화적 프론트엔드 드라이버 - Clang의
clangDriver
라이브러리 기반 구현 - 다양한 타겟 및 도구 지원 가능
Flang의 기여 및 반응
- Arm: Flang 기반 HPC 툴체인 개발
- Fujitsu: HPC 테스트 스위트를 통해 Flang 개선 기여
- Linaro: Fujitsu 테스트 스위트를 통한 결함 수정
- SciPy: Flang 도입으로 윈도우 지원 문제 해결
- Barcelona Supercomputing Center: RISC-V 벡터화 및 내부 병렬 모델 지원
-
Chris Lattner:
"Flang은 LLVM 프로젝트가 제공하는 협업 모델의 상징"
- AMD: 차세대 Fortran 컴파일러를 Flang 기반으로 개발 중
Flang 기여 방법
- Flang은 오픈소스 프로젝트로 지속적인 발전 중
- 직접 사용해 보고 피드백 제공 가능
- 코드 기여, 문서 수정 등 다양한 기여 방법 존재
- LLVM의 표준 기여 프로세스를 따름