Skip to main content
QUICK REVIEW

[논문 리뷰] RegDem: Increasing GPU Performance via Shared Memory Register Spilling

Putt Sakdhnagool, Amit Sabne|arXiv (Cornell University)|2019. 07. 05.
Parallel Computing and Optimization Techniques참고 문헌 29인용 수 5
한 줄 요약

이 논문은 RegDem을 제안하며, 이는 GPU 성능을 향상시키기 위해 과도한 레지스터를 이전에 외부 메모리에 스플릿하는 대신 미사용된 공유 메모리에 스플릿함으로써 점유율을 높이는 이진 번역 기법이다. 레지스터 사용을 최적화하고 컴파일 타임 성능 예측기를 사용해 최적의 변종을 선택함으로써 RegDem은 nvcc 컴파일러 대비 기하 평균 9%의 성능 향상을 달성하였으며, 아홉 가지 벤치마크에서 최대 18%의 성능 향상을 기록하였다.

ABSTRACT

GPU utilization, measured as occupancy, is limited by the parallel threads' combined usage of on-chip resources, such as registers and the programmer-managed shared memory. Higher resource demand means lower effective parallel thread count, and therefore lower program performance. Our investigation found that registers are often the occupancy limiters. The de-facto nvcc compiler-based approach spills excessive registers to the off-chip memory, ignoring the shared memory and leaving the on-chip resources underutilized. To mitigate the register demand, this paper presents a binary translation technique, called RegDem, that spills excessive registers to the underutilized shared memory by transforming the GPU assembly code (SASS). Most GPU programs do not fully use shared memory, thus allowing RegDem to use it for register spilling. The higher occupancy achieved by RegDem outweighs the slightly higher cost of accessing shared memory instead of placing data in registers. The paper also presents a compile-time performance predictor that models instructions stalls to choose the best version from a set of program variants. Cumulatively, these techniques outperform the nvcc compiler with a 9% geometric mean, the highest observed being 18%.

연구 동기 및 목표

  • GPU 점유율을 제한하는 레지스터 압박으로 인한 성능 저하 문제를 해결한다.
  • nvcc의 기본 전략이 외부 메모리에 스플릿함으로써 지연 시간이 증가하는 비효율성을 해결한다.
  • 더 빠른 대안으로서 미사용된 片상 공유 메모리를 활용해 레지스터 스플릿을 향상시킨다.
  • 다양한 레지스터 할당 전략 중 최적의 코드 변종을 선택하기 위한 컴파일 타임 성능 예측기를 개발한다.
  • 기본 컴파일러의 제약 조건을 회피하기 위해 SASS 어셈블리에 대한 이진 번역 단계를 통해 레지스터 강하 기법을 실용적으로 구현한다.

제안 방법

  • GPU SASS 어셈블리에 대해 이진 번역을 수행하여 과도한 레지스터 스플릿을 공유 메모리 액세스로 전환한다.
  • 세 가지 레지스터 강하 전략을 사용한다: 정적 액세스 수 계산, 루프 가중치가 있는 제어 흐름 그래프(CFG) 순회, 연산자 간 충돌 분석.
  • 비연속적인 레지스터 영역을 압축하여 최대 레지스터 번호를 최소화함으로써 하드웨어 레지스터 압박을 줄인다.
  • 지시어 스케줄링과 백엔드 충돌 방지 기법을 통합하여 최적화 과정 중 성능을 유지한다.
  • 점유율, 지시어 처리량, 메모리 액세스 지연 시간을 사용해 스탑트를 추정하는 성능 예측기를 개발한다. 수식은 다음과 같다: $\text{stall} = \text{inst}_{\text{stall}} \times \text{occupancy} \times \frac{\text{MAX\textunderscore THROUGHPUT}}{\text{inst}_{\text{throughput}}}$.
  • 예측기를 사용해 다양한 최적화 전략 중 최적의 변종을 선택함으로써, 완전 탐색 대비 99%의 정확도를 달성한다.

실험 결과

연구 질문

  • RQ1레지스터를 외부 메모리가 아닌 공유 메모리에 스플릿함으로써 GPU 점유율과 성능을 향상시킬 수 있는가?
  • RQ2레지스터보다 더 빠른 片상 공유 메모리에 스플릿함으로써 얻는 성능 이득이 더 높은 메모리 액세스 지연 시간 비용을 상쇄할 수 있는가?
  • RQ3레지스터 압박, 지시어 효율성, 메모리 액세스 비용 간의 상충 관계가 존재할 때 컴파일 타임 성능 예측기가 최적의 코드 변종을 효과적으로 추정할 수 있는가?
  • RQ4컴파일러 소스 코드에 접근할 수 없는 상황에서 SASS 어셈블리의 이진 번역을 통해 레지스터 강하 기법을 얼마나 효과적으로 구현할 수 있는가?
  • RQ5공유 메모리의 미사용 상태가 레지스터 강하 기법의 구현 가능성과 성능에 어떤 영향을 미치는가?

주요 결과

  • RegDem은 아홉 가지 다양한 GPU 벤치마크에서 nvcc 컴파일러 대비 기하 평균 9%의 성능 향상을 기록하였으며, 최대 18%의 성능 향상을 달성하였다.
  • 성능 예측기는 완전 탐색 대비 99%의 정확도로 최적의 코드 변종을 선택하여 효율적인 변종 선택을 가능하게 하였다.
  • 모든 평가된 GPU 커널에서 공유 메모리가 미사용 상태였으며, 자원 경쟁 없이도 레지스터 스플릿에 충분한 공간을 제공하였다.
  • 공유 메모리에 스플릿하는 것이 외부 메모리 스플릿보다 점유율 저하 문제를 더 효과적으로 완화하였으며, 더 낮은 지연 시간 덕분이었다.
  • 이진 번역 기반 접근법을 통해 기존의 비공개 nvcc 컴파일러 인프라에 접근하지 않아도 레지스터 강하 기법을 성공적으로 구현하였다.
  • 레지스터 백엔드 충돌과 다중 워드 레지스터 할당을 효과적으로 처리하여 정확성과 성능을 보장하였다.

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

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

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

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