Advent of Compiler Optimisations 2025
(xania.org)- C/C++ 컴파일러 최적화를 주제로 한 25일간의 어드벤트 캘린더 프로젝트
- 12월 1일부터 25일까지 매일 블로그 글과 영상을 통해 하나의 최적화 사례를 소개
- 각 게시물은 적용 시점, 어셈블리 해석, 비적용 상황까지 구체적으로 다룸
- x86-64 중심이지만 64비트 및 32비트 ARM 아키텍처도 일부 포함
- 컴파일러의 동작 원리를 배우고자 하는 개발자에게 교육적 가치가 높은 시리즈
Advent of Compiler Optimisations 2025 프로젝트 개요
- 약 1년간 준비된 프로젝트로, 12월 한 달간 매일 새로운 컴파일러 최적화 사례를 공개
- 12월 1일부터 25일까지 하루 한 편씩 블로그 글과 영상을 게시
- 각 콘텐츠는 C 또는 C++ 코드를 기반으로 컴파일러가 수행하는 흥미로운 최적화를 다룸
- 각 최적화는 적용 조건, 어셈블리 코드 해석, 적용되지 않는 경우까지 상세히 설명
- 단순한 코드 비교가 아니라 실제 컴파일러의 동작을 분석하는 형태
다루는 기술 범위
-
저수준 아키텍처별 트릭부터 고수준 최적화 기법까지 폭넓게 포함
- 주로 x86-64를 다루지만, 64비트 및 32비트 ARM 관련 내용도 일부 포함
- 컴파일러의 내부 동작과 코드 생성 과정을 학습할 수 있는 실용적 자료로 구성
참여 및 시청 방법
- 블로그의 AoCO2025 태그를 통해 모든 게시물을 추적 가능
- YouTube 채널 또는 전용 재생목록을 통해 영상 시청 가능
프로젝트 의의
- 약 1년간의 준비 끝에 완성된 대규모 개인 프로젝트로, 컴파일러의 정교함과 효율성을 탐구하는 목적
- 개발자들이 컴파일러 최적화의 실제 작동 원리를 이해하고, 코드 작성 시 이를 활용할 수 있도록 돕는 교육적 시도
- 작성자는 “컴파일러가 얼마나 놀라운지를 배우는 즐거움”을 함께 나누고자 함
Matt Godbolt 소개
- 시카고에 거주하는 C++ 개발자로, Hudson River Trading에서 근무
- Two’s Complement 팟캐스트 공동 진행자
- Mastodon과 Bluesky에서 활동 중
- 블로그 콘텐츠는 Creative Commons BY-NC 3.0 Unported 라이선스로 배포됨
Hacker News 의견
-
Matt의 컴파일러 최적화를 살펴본 후, 내가 그와 진행한 인터뷰도 확인해보면 좋겠음
내가 믿게 된 건 이거임: 자신이 편한 추상화 레벨에서 일하되, 그 아래 계층도 이해해야 함
예를 들어 C 프로그래머라면 C 런타임이 운영체제와 어떻게 상호작용하는지 알아야 함. 모든 세부사항은 몰라도 되지만, 문제가 생겼을 때 어디서부터 봐야 할지 감을 잡을 정도는 필요함
Matt가 쓴 ACM Queue 기사도 오래된 글이지만 이런 최적화 개념을 이해하기에 아주 좋은 입문서임- “자신이 일하는 계층 바로 아래를 이해하라”는 말을 대학 시절 교수님께 들었음. 그게 내 커리어에 큰 도움이 되었음
예를 들어 Java를 다룰 때 JVM을 이해하니 의료 소프트웨어의 성능을 훨씬 잘 최적화할 수 있었음. 그리고 단순히 그 아래 계층을 이해하는 게 재미있기도 함 - 고마워 Adam 😊
- “자신이 일하는 계층 바로 아래를 이해하라”는 말을 대학 시절 교수님께 들었음. 그게 내 커리어에 큰 도움이 되었음
-
그는 명백한 도메인 전문가임에도 불구하고, 처음부터 복잡한 x86 명령어 세트로 뛰어들지 않고 기본적인 부분부터 차근차근 설명하는 점이 인상적임
-
Matt Godbolt은 C와 C++ 커뮤니티의 진정한 보석 같은 존재임
Compiler Explorer와 그의 기여 덕분에 많은 개발자들의 세상이 더 나아졌다고 생각함- 뭐라고?! Godbolt이 실제 사람이라고!?
-
Advent of Computer Science Advent Calendars, Day 2를 보고 있음
- 이제 그 시점에 도달한 것 같음
-
나는 SQLite가 사용하는 코드 통합(amalgamation) 기법에 관심이 많음
SQLite 팀에 따르면 이 방식만으로도 5~10%의 성능 향상이 있다고 함. Matt가 세션 중에 이 주제를 다뤄줬으면 좋겠음- 이건 꽤 일반적인 주제이고, 사실상 컴파일러 최적화라기보다는 “** unity build**”라고 부르는 빌드 방식임
참고: Unity build 위키 - 요즘은 unity build보다 LTO(Link Time Optimization) 가 더 많이 쓰임
그래도 LTO가 비증분 빌드에서는 느릴 수 있어서, 일회성 빌드에서는 여전히 unity build가 유용함
- 이건 꽤 일반적인 주제이고, 사실상 컴파일러 최적화라기보다는 “** unity build**”라고 부르는 빌드 방식임
-
25년 동안 소프트웨어 개발을 해왔지만, 여전히 내가 최적의 컴파일러 플래그를 쓰고 있는지 궁금함
- 내 경험상, 플래그는 적을수록 좋음
대부분의 경우-O2면 충분함. 컴파일러가 업데이트될 때마다 내부 최적화가 개선되므로, 개발자가 직접 세세히 조정할 필요는 거의 없음
또, 잘못된 벤치마크에 기반해 플래그를 추가하는 건 위험함. 시스템 상태에 따라 1~2% 성능 차이는 흔한 일임
코드 구조가 바뀌면 캐시 친화성이 달라져서 성능이 변할 수도 있음. 즉, 플래그 때문이 아니라 코드 배치 덕분일 수도 있음
- 내 경험상, 플래그는 적을수록 좋음
-
남은 포스트들이 기대됨. 오늘 아침엔 SBCL에
(+ base (* index scale))과(+ base (ash index n))패턴을 단일 LEA 명령어로 최적화하도록 가르쳐봤음. Day 2에서 배운 내용을 바로 적용해본 셈임 -
Godbolt 콘텐츠는 아무리 많아도 부족하지 않음
-
정수 상수로 나누는 연산을 다뤄줬으면 좋겠음. Hacker’s Delight의 해당 챕터가 정말 훌륭하지만, 일반 독자에게는 조금 어렵게 느껴짐
-
컴파일러 덕후들을 위한 Advent of Code 같음
매일 한 입 크기의 최적화 레슨을 통해 직관을 쌓는 포맷이 너무 좋음
컴파일러가 무엇을, 왜 하는지를 이해하면 어떤 언어를 쓰든 더 나은 프로그래머가 될 수 있음