[논문 리뷰] A Language for Describing Optimization Strategies
이 논문은 고성능 코드 생성을 위한 사용자 정의로 조합 가능한 최적화 전략을 정의할 수 있도록 해주는 기능적 전략 언어인 Elevate를 소개한다. Elevate의 일급 추상화를 통해 구성된 리라이트 규칙로 최적화를 표현함으로써, 시스템은 Halide와 TVM 수준의 경쟁성 있는 성능을 달성한다 — 딥러닝 워크로드에서 기준 코드 대비 최대 110배의 성능 향상을 입증하였다. 이와 동시에 고정된 API 스케줄러를 넘어서 완전한 제어력과 확장성을 제공한다.
Optimizing programs to run efficiently on modern parallel hardware is hard but crucial for many applications. The predominantly used imperative languages - like C or OpenCL - force the programmer to intertwine the code describing functionality and optimizations. This results in a nightmare for portability which is particularly problematic given the accelerating trend towards specialized hardware devices to further increase efficiency. Many emerging DSLs used in performance demanding domains such as deep learning, automatic differentiation, or image processing attempt to simplify or even fully automate the optimization process. Using a high-level - often functional - language, programmers focus on describing functionality in a declarative way. In some systems such as Halide or TVM, a separate schedule specifies how the program should be optimized. Unfortunately, these schedules are not written in well-defined programming languages. Instead, they are implemented as a set of ad-hoc predefined APIs that the compiler writers have exposed. In this paper, we present Elevate: a functional language for describing optimization strategies. Elevate follows a tradition of prior systems used in different contexts that express optimization strategies as composition of rewrites. In contrast to systems with scheduling APIs, in Elevate programmers are not restricted to a set of built-in optimizations but define their own optimization strategies freely in a composable way. We show how user-defined optimization strategies in Elevate enable the effective optimization of programs expressed in a functional data-parallel language demonstrating competitive performance with Halide and TVM.
연구 동기 및 목표
- Halide와 TVM의 기존 스케줄링 API에서 보이는 확장성과 조합 가능성의 부족을 해결하기 위해, 사용자가 고정된 내장 최적화 집합에 국한되는 문제를 해결한다.
- 알고리즘 기술과 저수준 최적화 결정을 분리함으로써 다양한 전용 하드웨어 간의 성능 이식성을 달성한다.
- 복잡한 최적화 파이프라인을 리라이트 규칙의 시퀀스로 표현할 수 있는 원칙적이고, 조합 가능하며 확장 가능한 전략 언어를 제공한다.
- Elevate에서 사용자 정의 최적화 전략이 딥러닝 커널과 같은 실제 고성능 워크로드에 스케일업할 수 있음을 입증한다.
제안 방법
- Elevate는 고계 함수 조합자를 통해 최적화 전략을 조합하는 기능적 언어로 설계되어 있으며, 모듈화되고 재사용 가능한 최적화 정의를 가능하게 한다.
- 최적화 전략은 기능적 데이터-병렬 프로그램의 중간 표현에 적용되는 리라이트 규칙의 시퀀스로 표현된다.
- 시스템은 사용자 정의 추상화와 도메인 특화 최적화를 지원하여 표준 컴파일러 변환 집합을 초월한 확장을 허용한다.
- Elevate는 Rise 기능적 언어와 통합되어 코드 생성을 통해 C로 컴파일되며, 성능 비교를 위해 표준 컴파일 플래그를 사용한다.
- 이 접근법은 명확한 의미론을 가진 용어 재작성 기반으로 구현되어, 기존 스케줄링 API에서 흔히 볼 수 있는 히우리스틱적이고 암묵적인 동작 방식을 피한다.
- 전략은 스케줄러의 무작위 탐색 방식을 피하기 위해 제어되고 결정적인 리라이트 프로세스를 통해 체계적으로 적용된다.
실험 결과
연구 질문
- RQ1기능적 전략 언어를 사용하여 Halide와 TVM과 같은 수작업 최적화 시스템 수준의 성능을 달성하는 복잡한 고성능 최적화 전략을 표현할 수 있는가?
- RQ2Elevate의 사용자 정의 최적화 전략이 다양한 하드웨어 플랫폼 간의 성능 이식성을 얼마나 높이기 가능한가?
- RQ3Elevate의 조합 가능하고 확장 가능한 최적화 접근 방식은 Halide와 TVM의 고정 API 스케줄링에 비해 표현력과 제어력 면에서 어떻게 비교되는가?
- RQ4Elevate는 딥러닝 커널과 같은 실제 워크로드에 대해 최신 프레임워크 수준의 성능을 달성할 수 있는가?
주요 결과
- Elevate는 고정된 API 스케줄러의 한계를 극복하고, 사용자 정의로 조합 가능하고 확장 가능하며 완전히 사용자 제어가 가능한 최적화 전략 정의를 가능하게 한다.
- 시스템은 Halide 및 TVM 수준의 경쟁성 있는 성능을 보이는 코드를 성공적으로 생성하였으며, 한 가지 최적화된 Rise 기반 코드는 기준 코드 대비 110배의 성능 향상을 달성하였다.
- Elevate의 전략 언어는 딥러닝 워크로드에서 15만 개의 리라이트 단계를 거쳐 타일링, 벡터화, 병렬화와 같은 복잡한 최적화 파이프라인을 지원한다.
- 일관된 컴파일 플래그를 사용한 Intel i5-4670K CPU에서 동일한 최적화를 사용할 경우, Elevate가 생성한 코드의 성능은 TVM과 동일하다.
- Elevate의 접근법은 명확한 의미론을 제공하며 암묵적이거나 기본 동작을 피함으로써 전문가가 최적화 과정을 완전히 제어할 수 있도록 한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.