대규모 C++ 프로젝트를 개발할 때마다 개발자들을 괴롭히던 '링크(link)' 과정의 병목 현상이 새로운 링커 'mold'의 등장으로 해소될 전망입니다. mold는 유닉스(Unix)/리눅스(Linux) 환경에서 대형 C++ 프로그램의 링크 시간을 줄이기 위해 설계된 고성능 링커로, 기존 링커들이 멀티코어 프로세서의 잠재력을 충분히 활용하지 못했던 구조적 한계를 극복했습니다.
mold의 핵심은 링크 파이프라인의 모든 주요 단계를 데이터 병렬 방식으로 처리한다는 점입니다. 입력 파일 파싱과 심볼(symbol) 해석을 분리하여 아카이브(archive)의 모든 멤버를 병렬로 파싱하고, 원자적 비교 후 교환(compare-and-swap) 연산을 통해 심볼을 병렬로 해석합니다. 재배치(relocation) 스캔, 섹션 가비지 컬렉션, 동일 코드 폴딩(ICF), 문자열 병합, 레이아웃 계산, 출력 생성 등 거의 모든 링크 단계를 병렬화하여 암달의 법칙(Amdahl's Law)에 따른 직렬 구간의 성능 한계를 최소화했습니다. 실제 대규모 워크로드 평가에서 mold는 LLVM lld보다 2.4배에서 16.1배, GNU ld보다 최대 112배 빠른 속도를 기록했으며, 수 기가바이트(GiB)에 달하는 디버그 바이너리를 흔히 1초 미만, 길어도 수 초 이내에 링크하는 놀라운 성능을 보여주었습니다. 이는 24GiB의 오브젝트 파일을 9.9GiB 공유 라이브러리로 링크하는 텐서플로우(TensorFlow) 디버그 빌드가 64코어 머신에서 LLVM lld로 52초 걸리던 것을 크게 단축할 수 있음을 의미합니다.
이러한 mold의 등장은 대규모 C++ 프로젝트를 다루는 개발 팀의 생산성에 지대한 영향을 미칠 것으로 보입니다. 하루에도 여러 번 반복되는 '편집-컴파일-디버그' 주기에서 링크 병목은 개발자들의 시간을 낭비하고 작업 흐름을 끊는 주요 원인이었습니다. mold를 통해 링크 시간이 획기적으로 단축되면, 개발자들은 더 빠르게 변경 사항을 확인하고 테스트할 수 있게 되어 전체 개발 프로세스의 효율성이 크게 향상될 것입니다. 비록 일부에서는 mold의 기능 완성도나 바이너리 크기 증가에 대한 우려도 제기되지만, 현대 멀티코어 하드웨어의 성능을 최대한 활용하여 개발 경험을 개선하려는 시도라는 점에서 그 의미가 큽니다.