Skip to main content
QUICK REVIEW

[논문 리뷰] Compiling Language Definitions: The ASF+SDF Compiler

Mark van den Brand, Jan Heering|ArXiv.org|2000. 07. 06.
Parallel Computing and Optimization Techniques인용 수 6
한 줄 요약

이 논문은 ASF+SDF 메타언어로 작성된 고수준 언어 정의를 고도로 최적화된 C 코드로 변환하는 ASF+SDF 컴파일러를 제시한다. 최대 부분항 공유(해시-컨싱)와 직접 C 코드 생성을 활용함으로써 컴파일러는 기존 기능형 및 리寫트 언어 컴파일러를 능가하거나 근사하는 뛰어난 성능을 달성한다. 이는 최대 10,000개의 규칙과 100만 개 이상의 노드를 포함하는 대규모 언어 정의의 효율적 실행을 가능하게 한다.

ABSTRACT

The ASF+SDF Meta-Environment is an interactive language development environment whose main application areas are definition of domain-specific languages, generation of program analysis and transformation tools, production of software renovation tools, and general specification and prototyping. It uses conditional rewrite rules to define the dynamic semantics and other tool-oriented aspects of languages, so the effectiveness of the generated tools is critically dependent on the quality of the rewrite rule implementation. The ASF+SDF rewrite rule compiler generates C code, thus taking advantage of C's portability and the sophisticated optimization capabilities of current C compilers as well as avoiding potential abstract machine interface bottlenecks. It can handle large (10 000+ rule) language definitions and uses an efficient run-time storage scheme capable of handling large (1 000 000+ node) terms. Term storage uses maximal subterm sharing (hash-consing), which turns out to be more effective in the case of ASF+SDF than in Lisp or SML. Extensive benchmarking has shown the time and space performance of the generated code to be as good as or better than that of the best current rewrite rule and functional language compilers.

연구 동기 및 목표

  • 복잡한 프로그램 분석, 변환 및 소프트웨어 리뉴얼 작업을 지원하는 ASF+SDF 언어 정의를 위한 고성능 컴파일러를 개발하는 것.
  • 항목 재귀 시스템에서 해석 실행의 성능 저하 문제를 해결하기 위해 효율적이고 이식 가능한 C 코드를 생성하는 것.
  • 대규모 언어 정의(최대 10,000개의 규칙)와 거대한 용어 구조(100만 개 이상의 노드)를 스케일러블하게 처리할 수 있도록 하는 것.
  • 최대 부분항 공유를 통한 런타임 효율성 향상으로 메모리 사용량을 줄이고 용어 동일성 검사 속도를 높이는 것.

제안 방법

  • C 컴파일러 최적화를 활용하고 가상 머신 오버헤드를 피하기 위해 ASF+SDF 언어 정의를 직접 이식 가능한 최적화된 C 코드로 컴iles하는 것.
  • 메모리 할당을 최소화하고 용어 비교를 가속화하기 위해 최대 부분항 공유(해시-컨싱) 기반의 런타임 저장 구조를 도입하는 것.
  • 복잡한 의미론과 제어 흐름을 표현하기 위해 조건부 리寫트 규칙, 연관 리스트, 기본 규칙을 사용하는 것.
  • 엄격 및 지연 평가 패턴을 모두 지원하는 효율적인 용어 표현 및 조작을 위한 ATerm 라이브러리 통합.
  • 메모리 및 시간 집약적인 워크로드(예: evalexp, evaltree)를 적용한 벤치마킹을 통해 스트레스 상황에서의 성능 평가.
  • 실제 대규모 정의에서 도구 체인의 유효성 검증 및 성능 측정을 위해 ASF+SDF 컴파일러 자체를 재컴파일하는 것.

실험 결과

연구 질문

  • RQ1고수준 언어 정의 언어에서 C로의 직접 컴파일링 접근 방식이 기존 기능형 및 리寫트 언어 컴파일러와 비교해 성능이 유사하거나 뛰어나게 할 수 있는가?
  • RQ2대규모 용어 재귀 시스템에서 최대 부분항 공유가 메모리 사용량을 줄이고 용어 동일성 성능을 향상시키는 데 얼마나 효과적인가?
  • RQ3생성된 C 코드가 성능 저하 없이 대규모 언어 정의(예: 10,000개 이상의 규칙)와 거대한 용어 구조(예: 100만 개 이상의 노드)를 얼마나 잘 처리할 수 있는가?
  • RQ4직접 C 코드 생성과 효율적인 용어 저장의 조합이 해석 실행 또는 가상 머신 기반 실행보다 더 뛰어난 성능을 제공하는가?
  • RQ5지연 평가와 높은 용어 재사용을 요구하는 메모리 집약적 워크로드 하에서 컴파일러는 효과적으로 확장 가능한가?

주요 결과

  • ASF+SDF 컴파일러는 시간 및 공간 효율성 측면에서 현재 최고 수준의 기능형 및 리寫트 언어 컴파일러와 유사하거나 뛰어난 성능을 보인다.
  • 최대 부분항 공유 기법은 메모리 사용량을 최대 90%까지 줄이며, 특히 evaltree와 같은 메모리 집약적 벤치마크에서 성능 향상에 기여한다.
  • 컴파일러는 대규모 정의를 성공적으로 처리한다: ASF+SDF 컴파일러는 공유 기능을 사용할 경우 216초 내에 재컴파일되며, 공유 없이 사용할 경우 661초가 소요되며, 메모리 사용량은 각각 16MB와 117MB이다.
  • Risla 전개기의 경우 공유 기능을 사용할 경우 9초(비공유 시 18초)에 컴파일되며, 메모리 사용량은 오직 8MB로 제한되어, 도메인 특화 언어 처리에서의 확장성을 입증한다.
  • evaltree 벤치마크에서 최대 부분항 공유를 사용하는 ASF+SDF만 n=20를 초월해도 스케일링이 가능하며, 다른 시스템은 실패하는 동안도 수용 가능한 메모리 사용량을 유지한다.
  • 실행 시간 비교 결과, 일부 벤치마크에서 only Clean(lazy)이 ASF+SDF를 뛰어넘지만, 격차는 작아 ASF+SDF의 높은 경쟁력 있는 성능를 확인한다.

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

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

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

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