NVIDIA 엔지니어, GCC 부트스트랩(Bootstrap) 시간을 대폭 단축하는 패치 고안
GNU
GCC 부트스트랩(Bootstrap)을 수행하면 GCC의 세 가지 빌드 단계 동안 각각 Autoconf configure를 실행하게 됩니다. 하지만 configure 스크립트가 직렬(serially)로 실행되고, 방대한 코드베이스를 가진 GCC 컴파일러의 경우 시간이 상당히 많이 소요되기 때문에, 결과적으로 상당한 양의 시간이 낭비됩니다.
제안된 패치는 configure 결과를 캐싱(cache)하여 GCC의 세 가지 컴파일 단계 전반에 걸쳐 사용할 수 있도록 함으로써, 직렬 스크립트 실행에 소요되는 많은 시간을 방지하는 것입니다. 크로스 컴파일(cross-compiling)이 아닌 네이티브 부트스트랩(native bootstraps)의 경우, configure 스크립트는 변경되지 않아야 합니다.
Kyrylo Tkachov는 NVIDIA Vera일 가능성이 높은 이름 미상의 "대규모 멀티코어 AArch64 머신"에서, 컴파일러 부트스트랩(bootstrap) 동안 소요되는 실제 시간(wall time)의 약 30%가 configure 스크립트를 실행하는 데 사용되며, 빌드 프로세스의 거의 절반 동안 머신 활용률(machine utilization)이 15% 미만으로 제한된다는 점을 언급했습니다.
초기 패치를 적용한 최종 결과는 다음과 같습니다:
"이것은 configure에 소요되는 시간을 대략 절반으로 줄이며(약 43% 감소), 생성된 구성(configuration)의 변경 없이 전체 부트스트랩(bootstrap) 실제 시간(wall time)을 약 15% 단축합니다. 생성된 config 헤더는 캐싱되지 않은 빌드와 동일하며, stage 2 / stage 3 비교도 여전히 성공합니다. "make bootstrap"으로 검증되었으며, cross, Canadian 및 --disable-bootstrap 빌드에는 영향을 받지 않아야 합니다.
aarch64-none-linux-gnu 및 x86_64-linux에서 부트스트랩(Bootstrapped) 및 테스트되었습니다."
해당 패치는 gcc-patches 메일링 리스트에서 테스트를 위해 공개되었습니다.
이에 대한 대응으로, 이러한 설정(configure) 결과의 캐싱은 일종의 "해킹 (hack)"에 가깝다는 제안이 이미 있었습니다. 또한, 소요 시간을 줄이는 데 도움이 되도록 설정 스크립트(configure scripts)를 더욱 정비할 수 있다는 주장도 제기되었습니다. 현재는 무용지물로 간주되는 설정 확인(configure checks) 항목들이 있으며, GNU Gold 링커(linker) 지원 제거 가능성, 그리고 제거하거나 최소한 정비할 수 있는 다른 잔재들이 존재합니다. 설정 스크립트를 정비하는 것은 네이티브 부트스트랩(native bootstraps)뿐만 아니라 교차 컴파일(cross-compiling) 빌드에도 이점을 줄 것입니다.
이 작업이 어떤 결과로 이어질지 지켜봐야 하겠지만, GCC 부트스트랩을 수행하는 데 소요되는 시간을 대폭 단축하려는 모든 노력은 충분히 가치 있는 일입니다.