AI가 만든 C 컴파일러, GCC에 도전장을 내밀다!
Anthropic의 Claude AI가 개발한 C 컴파일러(CCC)가 등장하여, 리눅스 커널 컴파일을 시도했으나 링커 에러로 실패함.
CCC는 SQLite를 성공적으로 컴파일했지만, GCC에 비해 최대 158,000배 느린 성능을 보이며, 특히 복잡한 쿼리에서 큰 격차를 보임.
레지스터 할당(Register Allocation) 및 최적화 부재(Optimization Absence)가 주요 성능 저하 원인으로 지적됨.
커뮤니티에서는 AI가 컴파일러를 개발할 수 있다는 점에 주목하면서도, 실용성 부족에 대한 우려를 표명함.
CCC의 리눅스 커널 컴파일 실패 원인
CCC는 리눅스 커널의 모든 C 파일을 컴파일하는 데 성공했지만, 링커 단계에서 40,784개의 오류가 발생하여 최종 바이너리 생성을 실패했다. 특히, __jump_table 및 __ksymtab 관련 링커 오류는 CCC가 커널의 복잡한 링커 스크립트에 맞는 재배치(Relocation)를 생성하지 못했음을 의미한다. 이는 컴파일러의 C 코드 변환 능력과는 별개로, 링커의 복잡성을 보여주는 사례이다.
SQLite 벤치마크를 통한 성능 분석
CCC는 SQLite를 성공적으로 컴파일했지만, GCC -O0에 비해 1.3배 느리고, -O2에서는 737배에서 최대 158,000배까지 느린 성능을 보였다. 이러한 성능 저하는 주로 레지스터 스필링(Register Spilling), 최적화 부재(Optimization Absence), 그리고 코드 크기 증가(Code Bloat)로 인한 것으로 분석된다. 특히, 복잡한 쿼리에서 발생하는 성능 저하는 CCC의 최적화 기술 부족을 여실히 드러낸다.
CCC의 기술적 한계: 레지스터 할당과 최적화
CCC는 레지스터 할당(Register Allocation)을 제대로 수행하지 못해, 빈번한 메모리 접근으로 인해 성능 저하를 겪는다. 또한, -O2 옵션을 사용해도 최적화가 전혀 적용되지 않는다는 점은 CCC의 최적화 파이프라인(Optimization Pipeline)이 제대로 구축되지 않았음을 의미한다. GCC는 다양한 최적화 기법을 통해 성능을 향상시키지만, CCC는 이러한 기능을 제공하지 못한다.
AI 컴파일러의 미래와 과제
이번 실험은 AI가 컴파일러를 개발할 수 있다는 가능성을 보여주었지만, 실용적인 수준에는 미치지 못함을 확인했다. 커뮤니티에서는 AI가 컴파일러 개발의 초기 단계를 성공적으로 수행했다는 점에 주목하며, 향후 성능 개선에 대한 기대를 표명한다. 하지만, 코드 품질(Code Quality), 디버깅 지원(Debugging Support), 그리고 다양한 아키텍처 지원(Multi-Architecture Support) 등 해결해야 할 과제가 많다는 점을 강조한다.