Skip to main content
QUICK REVIEW

[논문 리뷰] High-Performance GPU-to-CPU Transpilation and Optimization via High-Level Parallel Constructs

William S. Moses, Ivan R. Ivanov|arXiv (Cornell University)|2022. 07. 01.
Parallel Computing and Optimization Techniques인용 수 4
한 줄 요약

이 논문은 MLIR의 고수준 병렬 구조를 사용하여 CUDA 커널을 자동으로 고성능 CPU 코드로 트랜스파일링하는 컴파일러 프레임워크를 제시한다. 이는 수동 이식이 필요 없이 CPU에서 효율적인 최적화와 실행을 가능하게 한다. Fugaku에서 트랜스파일된 CUDA 커널을 활용해 Rodinia 벤치마크 세트에서 수작업으로 작성된 OpenMP 코드 대비 평균 76%의 성능 향상을 달성했으며, PyTorch의 네이티브 CPU 백엔드 대비 2.7배 빠른 성능을 기록했다.

ABSTRACT

While parallelism remains the main source of performance, architectural implementations and programming models change with each new hardware generation, often leading to costly application re-engineering. Most tools for performance portability require manual and costly application porting to yet another programming model. We propose an alternative approach that automatically translates programs written in one programming model (CUDA), into another (CPU threads) based on Polygeist/MLIR. Our approach includes a representation of parallel constructs that allows conventional compiler transformations to apply transparently and without modification and enables parallelism-specific optimizations. We evaluate our framework by transpiling and optimizing the CUDA Rodinia benchmark suite for a multi-core CPU and achieve a 76% geomean speedup over handwritten OpenMP code. Further, we show how CUDA kernels from PyTorch can efficiently run and scale on the CPU-only Supercomputer Fugaku without user intervention. Our PyTorch compatibility layer making use of transpiled CUDA PyTorch kernels outperforms the PyTorch CPU native backend by 2.7$ imes$.

연구 동기 및 목표

  • HPC 및 머신러닝 분야에서 GPU 최적화 코드가 GPU가 없는 시스템(예: Fugaku)에서 다시 작성되어야 하는 성능 이식성 문제를 해결하기 위해.
  • 기존 도구들이 수동 재작성 필요로 하는 한계를 극복하기 위해 CUDA에서 CPU 스레드로의 완전 자동화된 고수준 트랜스파일링을 가능하게 하기 위해.
  • 동기화를 메모리 의미 체계를 통해 모델링함으로써 GPU 스타일의 병렬 구조에 대해 전통적인 컴파일러 최적화(예: 루프 불변 코드 이동, 공통 표현식 제거)를 적용할 수 있도록 하기 위해.
  • GPU 하드웨어 없이도 PyTorch 최적화 커널이 CPU 전용 슈퍼컴퓨터에서 효율적으로 실행될 수 있도록, PyTorch 호환 트랜스파일레이어를 제공하기 위해.

제안 방법

  • 프레임워크는 블록 수준의 동기화와 공유 메모리까지 포함한 다수준 GPU 병렬성을 유지하는 MLIR의 중첩 모듈 구조를 사용하여 표현한다.
  • GPU 장벽을 메모리 의미 체계 연산으로 모델링함으로써, 투명한 장벽으로 간주하는 대신 표준 컴파일러 최적화와 통합할 수 있도록 한다.
  • C/C++ 프론트엔드를 확장하여 CUDA 코드를 파싱하고, 병렬 구조와 데이터 레이아웃을 유지한 채로 MLIR를 출력한다.
  • 메모리 동작 분석을 통해 GPU 스타일의 병렬 영역에 표준 컴파일러 최적화(예: 루프 불변 코드 이동)를 투명하게 적용한다.
  • 트랜스파일된 코드는 OpenMP 기반 병렬 CPU 코드로 컴파일되어 일반 및 엑사스케일 CPU에서 효율적인 다중 코어 실행을 가능하게 한다.
  • PyTorch 호환성 레이어는 런타임에서 CUDA 커널을 트랜스파일하여 GPU 최적화 모델이 GPU가 없는 시스템(예: Fugaku)에서 실행될 수 있도록 한다.

실험 결과

연구 질문

  • RQ1컴파일러가 병렬성을 유지하고 최적화하면서 CUDA 커널을 고성능 CPU 코드로 자동 트랜스파일링할 수 있는가?
  • RQ2표준 컴파일러 최적화를 수정 없이 적용할 수 있도록 고수준 병렬 구조를 어떻게 표현할 수 있는가?
  • RQ3GPU 스타일의 동기화(예: 블록 전체 장벽)를 메모리 의미 체계를 통해 모델링하여 기존 최적화와 통합할 수 있는가?
  • RQ4트랜스파일된 CUDA 코드가 CPU 아키텍처에서 수작업으로 작성된 OpenMP 대비 성능이 뛰어나게 할 수 있는가?
  • RQ5GPU 하드웨어 없이도 PyTorch CUDA 커널이 CPU 전용 슈퍼컴퓨터(Fugaku 등)에서 효율적으로 실행될 수 있는가?

주요 결과

  • 트랜스파일된 CUDA 코드는 일반 CPU에서 Rodinia 벤치마크 세트에서 수작업으로 작성된 OpenMP 대비 평균 76%의 성능 향상을 기록했다.
  • 프레임워크는 CPU 전용 Fugaku 슈퍼컴퓨터에서 PyTorch CUDA 커널을 효율적으로 실행할 수 있게 했으며, 네이티브 PyTorch CPU 백엔드 대비 평균 2.7배 빠른 성능을 기록했다.
  • 시스템은 CPU에서 원래 커널 스케줄을 유지했으며, 내부 루프의 직렬화로 인해 스레드 분열이 감소하고 메모리 액세스 패턴이 향상되어 성능 향상을 이뤘다.
  • 메모리 의미 체계 기반 장벽 모델링을 통해 표준 컴파일러 최적화(예: 루프 불변 코드 이동, 공통 표현식 제거)를 GPU 스타일 병렬 영역에 직접 적용할 수 있었다.
  • 프레임워크는 ResNet-50와 같은 복잡한 커널을 성공적으로 트랜스파일하고 최적화하여 실제 딥러닝 워크로드에 대한 호환성을 입증했다.
  • 수동 재작성 없이도 성능 이식성을 확보할 수 있었으며, GPU 최적화 코드를 CPU 전용 또는 이종 HPC 시스템에 적응시키는 데 드는 비용을 감소시켰다.

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

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

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

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