Skip to main content
QUICK REVIEW

[논문 리뷰] Souper: A Synthesizing Superoptimizer

Raimondas Sasnauskas, Yang Chen|arXiv (Cornell University)|2017. 11. 13.
Parallel Computing and Optimization Techniques참고 문헌 17인용 수 42
한 줄 요약

Souper는 SAT/SMT 솔버를 사용하여 기능적이고 제어 흐름이 없는 중간 표현(IR)에서 등가이면서 더 효율적인 코드 시퀀스를 탐색함으로써 자동으로 새로운 컴파일러 최적화를 발견하고 적용하는 합성 슈퍼옵티마이저이다. 이는 Clang 바이너리 크기를 4.4% (3 MB) 감소시켰으며, LLVM 및 마이크로소프트 비주얼 C++에서 수작업으로 개선된 최적화를 이끌어냈다.

ABSTRACT

If we can automatically derive compiler optimizations, we might be able to sidestep some of the substantial engineering challenges involved in creating and maintaining a high-quality compiler. We developed Souper, a synthesizing superoptimizer, to see how far these ideas might be pushed in the context of LLVM. Along the way, we discovered that Souper's intermediate representation was sufficiently similar to the one in Microsoft Visual C++ that we applied Souper to that compiler as well. Shipping, or about-to-ship, versions of both compilers contain optimizations suggested by Souper but implemented by hand. Alternately, when Souper is used as a fully automated optimization pass it compiles a Clang compiler binary that is about 3 MB (4.4%) smaller than the one compiled by LLVM.

연구 동기 및 목표

  • 복잡한 미들엔드 컴파일러 최적화를 개발하고 유지보수하는 데 드는 높은 공학적 비용을 해결하기 위해.
  • 자동 합성에 의한 슈퍼옵티마이제이션을 통해 수작업으로 구현하기 어려우거나 시간이 오래 걸리는 새로운 고성능 최적화를 발견할 수 있는지 탐색하기 위해.
  • LLVM 및 마이크로소프트 비주얼 C++를 포함한 여러 컴파일러에서 동일한 일반적인 슈퍼옵티마이저를 적용할 수 있는지의 가능성을 평가하기 위해.
  • 실질적이고 검증된 제안을 통해 최적화 자동 발견 및 생산 컴파일러에의 통합을 가능하게 하기 위해.
  • 향후 형식적 검증 컴파일러를 위한 합성과 증명 생성 솔버의 조합 가능성 탐구하기 위해.

제안 방법

  • LLVM IR에 가까운 기능적이고 제어 흐름이 없는 중간 표현(IR)을 사용하며, 51개의 비트너비 다형성 정수 명령어를 지원한다.
  • 원본 및 합성된 코드 시퀀스 간의 등가성 검사를 수행하기 위해 SAT/SMT 솔버를 활용하여 정확성을 보장한다.
  • Gulwani 등(2011)의 방법을 확장한 합성 알고리즘을 적용하여 최적의 명령어 시퀀스를 생성하며, 상수 폴딩 및 전파를 포함한다.
  • LLVM의 최적화 단계로 작동하여 상수 전파 및 죽은 코드 제거의 누적 효과를 극대화한다.
  • 최적화 결과를 캐시하여 후속 빌드에서 컴파일 오버헤드를 줄이며, 웜업 이후에는 거의 일정한 시간 성능을 달성한다.
  • 다른 컴파일러(예: MSVC)의 IR을 Souper의 IR로 변환하여 다중 컴파일러 최적화 발견을 가능하게 한다.

실험 결과

연구 질문

  • RQ1합성 슈퍼옵티마이저는 표준 컴파일러 단계에서 표현할 수 없는 새로운, 정확하고 유익한 컴파일러 최적화를 자동으로 발견할 수 있는가?
  • RQ2SAT/SMT 해결 및 프로그램 합성에 기반한 슈퍼옵티마이저가 실제 컴파일러에서 기존 수작업 최적화에 비해 얼마나 뛰어난 성능을 보일 수 있는가?
  • RQ3동일한 슈퍼옵티마이저 프레임워크가 LLVM 및 마이크로소프트 비주얼 C++와 같은 다양한 컴파일러 인프라에서 효과적으로 적용될 수 있는가?
  • RQ4클라우드와 같은 큰 바이너리에 적용했을 때, 자동 슈퍼옵티마이제이션의 성능 및 코드 크기 영향은 전통적 컴파일링과 비교해 어떻게 되는가?
  • RQ5증명 생성 솔버를 사용한 형식적 검증 컴파일러에 합성 최적화를 통합할 잠재력은 무엇인가?

주요 결과

  • LLVM 자체를 컴iles할 때 Souper는 약 7,900개의 고유한 최적화를 발견했으며, 이를 총 85,000회 이상 적용했다.
  • Souper로 컴파일한 Clang-3.9 바이너리는 표준 LLVM 최적화로 컴파일한 동일한 바이너리보다 3 MB(4.4%) 작았다.
  • 최적화된 바이너리에서 성능 저하가 약 2% 발생했지만, 코드 크기 감소는 상당한 실용적 이점을 보여주었다.
  • 초기 컴파일은 표준 LLVM 컴파일보다 5배에서 25배 느렸지만, 캐시가 웜업된 후에는 컴파일 시간이 거의 동일했다(9분 대비 8분).
  • Souper가 제안한 몇몇 최적화는 LLVM 및 마이크로소프트 비주얼 C++ 컴파일러에서 수작업으로 구현되었으며, 그 실용적 가치를 확인했다.
  • Souper의 IR는 마이크로소프트 비주얼 C++의 IR로 성공적으로 매핑되어, LLVM 외부 컴파일러에서도 최적화 발견이 가능함을 입증했으며, 이는 다중 컴파일러 적용 가능성을 보여주었다.

더 나은 연구,지금 바로 시작하세요

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.