1P by neo 3일전 | ★ favorite | 댓글과 토론
  • LLVM은 2020년 LLVM 11에서부터 Fortran 컴파일러 Flang을 포함해 옴
  • 초기 실행 파일 이름은 flang이 아닌 flang-new였음
  • LLVM 20에서 flang-newflang으로 변경하면서 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-newflang으로 이름 변경
  • 2025년: LLVM 20.1에서 flang 실행 파일 포함

Flang의 이름 변경 과정

  • Flang의 이름 변경은 여러 차례 논의되었음
  • 결정 기준:
    • 주요 기능 및 성능 문제 해결
    • 미완성 언어 기능은 명확한 오류 메시지 출력
    • 다른 Fortran 컴파일러와 성능 비교에서 우수한 결과 필요
    • 광범위한 테스트 스위트를 통한 안정성 확인
  • LLVM 공동 창립자 Chris Lattner의 조언:

    "기존 Flang과 새로운 Flang의 이름 충돌 문제 해결 필요"

  • 2024년 10월, 커뮤니티 합의 후 flang-newflang으로 이름 변경 완료

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. 머신 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의 표준 기여 프로세스를 따름