LLVM 개발팀이 ThinLTO를 개선하기 위해 MTPC(Multi-Thread Parallel Compilation)라는 제안을 발표했습니다. 현재 이 기술은 전체 모듈을 병렬화하지만, 큰 모듈은 직렬로 처리되어 병목 현상이 발생합니다. MTPC는 작업을 함수 수준에서 분할하여 이러한 장벽을 허물고자 합니다.
ThinLTO에서 모듈 내 병렬 처리 작동 방식 🚀
MTPC는 큰 모듈을 함수 기반의 더 작은 단위로 분할하는 기능을 도입합니다. 데이터 종속성과 전역 참조가 올바르게 관리된다면 각 함수는 독립적인 스레드에서 컴파일 및 최적화될 수 있습니다. 이를 통해 멀티코어 프로세서가 동일한 모듈 내에서 동시에 작업하여 매우 큰 소스 파일이 있는 프로젝트의 컴파일 시간을 단축할 수 있습니다.
건드릴 수 없다고 믿었던 모듈의 드라마 😅
지금까지 큰 모듈은 평화로운 삶을 누렸습니다. 모든 코드가 마치 슈퍼마켓의 줄처럼 직렬로 컴파일되었죠. MTPC를 사용하면, 그 게으른 함수들은 마치 상사가 커피가 떨어졌다고 말한 것처럼 병렬로 작업해야 합니다. 개발자들은 컴파일러가 끝나길 기다리며 쉬는 시간에 작별 인사를 할 수 있겠지만, 일부 모듈은 동기화 부족으로 파업을 할지도 모릅니다.