Cornell CS 6120: Advanced Compilers Self-Guided Course

Cornell University는 프로그래밍 언어 구현에 관한 박사 과정 수준의 강의인 CS 6120: Advanced Compilers를 자기 주도형 온라인 커리큘럼으로 공개했습니다. Adrian Sampson가 강의하는 이 과정은 독립적인 학습자가 보편적인 컴파일러 주제와 연구 지향적 구현 기술을 마스터할 수 있는 포괄적인 경로를 제공합니다.

Course Overview and Learning Objectives

CS 6120는 기초적인 컴파일러 이론과 고급 연구 주제 모두에 초점을 맞추어 프로그래밍 언어 구현을 가르치도록 설계되었습니다. 커리큘럼은 비디오 강의, 서면 노트, 학술 논문을 결합한 선형적인 레슨 타임라인으로 구성되어 있습니다.

Core Compiler Topics

이 과정은 다음과 같은 컴파일러 구축의 "classic" 기둥을 다룹니다:

  • Intermediate Representations (IR): 프로그램이 분석 및 최적화를 위해 내부적으로 어떻게 표현되는지.
  • Data Flow Analysis: 프로그램을 통해 데이터의 값과 상태를 추적하는 기술.
  • Global and Local Analysis: 기본 블록(basic block) 및 함수 수준 모두에서 코드를 최적화하는 방법.
  • Static Single Assignment (SSA): 많은 컴파일러 최적화를 단순화하기 위한 핵심적인 형태.
  • Loop Optimization: 실행 루프의 효율성을 개선하기 위한 전략.
  • Interprocedural Analysis: 함수 경계를 넘어 프로그램 동작을 분석하는 것.
  • Alias Analysis: 서로 다른 포인터가 동일한 메모리 위치를 참조하는지 여부 결정.

Advanced and Research-Oriented Topics

표준 최적화를 넘어, 이 과정은 현대적인 런타임 및 실행 환경을 깊이 있게 다룹니다:

  • Just-In-Time (JIT) Compilation: 동적 컴파일러의 메커니즘과 추측(speculation)을 통한 트레이싱.
  • Memory Management: 가비지 컬렉션(GC) 및 동적 타이핑 언어의 구현에 대한 심층 분석.
  • Concurrency and Parallelism: 컴파일러가 멀티스레드 실행 및 superword level parallelism을 어떻게 처리하는지 탐구.
  • Fast Compilers: 컴파일러 자체의 실행 시간을 단축하는 기술.

Practical Implementation and Tooling

학습은 추상적인 개념을 기능적인 코드로 바꾸기 위해 설계된 "open-source hacking tasks"에 기반을 둡니다. 이 과정은 이러한 구현 작업을 위해 두 가지 주요 도구를 사용합니다:

  1. LLVM: 업계 표준 컴파일러 인프라.
  2. Bril: 학습 과정을 단순화하기 위해 이 과정을 위해 특별히 발명된 교육용 중간 표현(intermediate representation).

Curriculum Structure

자기 주도형 버전의 과정은 대학 버전과 동일한한 학술적 엄격함을 따르지만 공식적인 제약은 제거되었습니다. 학생들은 마감일을 무시할 수 있으며, 이해를 공고히 하기 위해 개방형 구현 작업을 완료하도록 권장됩니다.

Lesson Breakdown

Lesson Topic Key Focus Areas
1 Welcome & Overview Introduction to empirical evaluation and correctness
2 Representing Programs Introduction to Bril and program representation
3 Local Analysis & Optimization Dead code elimination and local value numbering
4 Data Flow
5 Global Analysis Global optimization and path profiling
6 Static Single Assignment SSA form and peephole optimizations
7 LLVM Writing LLVM passes
8 Loop Optimization Improving loop efficiency
9 Interprocedural Analysis Type-based alias analysis
10 Alias Analysis Alias analysis and garbage collection theory
11 Memory Management GC implementation and JIT type specialization
12 Dynamic Compilers Tracing, speculation, and superoptimizers
13 Concurrency & Parallelism Threading, parallelism, and formal verification
14 Fast Compilers Optimizing the compiler's own performance

대학 버전은 공식적인 코스 프로젝트로 마무리되지만, 자기 주도형 버전은 학습자가 자신의 지식을 실제 세계의 컴파일러 프로젝트에 적용하도록 권장합니다.

Sources