Skip to main content
QUICK REVIEW

[논문 리뷰] Optimization of Tensor-product Operations in Nekbone on GPUs

Martin Karp, Niclas Jansson|arXiv (Cornell University)|2020. 05. 27.
Parallel Computing and Optimization Techniques참고 문헌 11인용 수 5
한 줄 요약

이 논문은 Nek5000 CFD 솔버의 프록시 애플리케이션인 Nekbone에서 텐서 곱 연산을 CUDA 기반 2차원 스레드 구조를 사용하여 최적화하여 메모리 액세스 패턴을 향상시키고, 효율적인 루프 분할, 공유 메모리 사용 및 레지스터 최적화를 가능하게 하였다. 구현은 다항식 차수 9 및 입력 크기 1024–4096 요소에서 V100과 P100 GPU에서 각각 77–92%의 피크 성능을 달성하였으며, 이는 이전 GPU 버전 대비 6–10% 향상된 성능이다.

ABSTRACT

In the CFD solver Nek5000, the computation is dominated by the evaluation of small tensor operations. Nekbone is a proxy app for Nek5000 and has previously been ported to GPUs with a mixed OpenACC and CUDA approach. In this work, we continue this effort and optimize the main tensor-product operation in Nekbone further. Our optimization is done in CUDA and uses a different, 2D, thread structure to make the computations layer by layer. This enables us to use loop unrolling as well as utilize registers and shared memory efficiently. Our implementation is then compared on both the Pascal and Volta GPU architectures to previous GPU versions of Nekbone as well as a measured roofline. The results show that our implementation outperforms previous GPU Nekbone implementations by 6-10%. Compared to the measured roofline, we obtain 77 - 92% of the peak performance for both Nvidia P100 and V100 GPUs for inputs with 1024 - 4096 elements and polynomial degree 9.

연구 동기 및 목표

  • GPU 아키텍처에서 Nek5000 CFD 솔버의 프록시 애플리케이션인 Nekbone의 텐서곱 연산 성능을 향상시키는 것.
  • 이전에 혼합된 OpenACC 및 CUDA 방식을 사용한 Nekbone의 GPU 구현에서 발생하는 성능 한계를 극복하는 것.
  • 메모리 액세스 효율성을 향상시키고 공유 메모리 및 레지스터와 같은 GPU 자원을 더 잘 활용할 수 있는 대안적 스레드 매핑 전략을 탐색하는 것.
  • 최신 GPU 아키텍처에서 최적화된 커널의 성능을 이전 GPU 버전 및 측정된 루프라인 모델과 비교 평가하는 것.

제안 방법

  • 데이터 국소성과 메모리 액세스 패턴을 향상시키기 위해 텐서 연산을 계층적으로 처리하는 CUDA 기반 2차원 스레드 구조를 채택하여 구현.
  • 루프 오버헤드를 줄이고 명령 수준의 병렬성을 향상시키기 위해 루프 분할을 적용.
  • 글로벌 메모리 액세스를 줄이고 스레드 간 데이터 재사용을 증가시키기 위해 공유 메모리 활용.
  • 레지스터 압력을 최소화하기 위해 정교한 커널 설계와 데이터 레이아웃을 통한 레지스터 사용 최적화.
  • 텐서곱 연산 패턴과 일치하도록 스레드 블록에 계산을 매핑하여 점유도와 메모리 대역폭 활용도를 극대화.

실험 결과

연구 질문

  • RQ1기존의 1차원 또는 혼합 방식의 GPU 구현 대비 2차원 스레드 매핑 전략이 Nekbone의 텐서곱 연산 성능에 어떻게 기여하는가?
  • RQ2루프 분할 및 공유 메모리 최적화는 스펙트럼 요소 방법을 위한 GPU 가속 텐서 연산에서 성능 향상에 어느 정도 기여하는가?
  • RQ3최신 GPU 아키텍처인 Volta 및 Pascal에서 최적화된 커널의 구현 가능한 성능은 이론적 루프라인 대비 얼마나 되는가?
  • RQ4다양한 문제 크기와 다항식 차수에서 새로운 구현은 이전의 Nekbone GPU 버전 대비 성능에서 어떻게 비교되는가?

주요 결과

  • 최적화된 CUDA 커널은 다항식 차수 9 및 입력 크기 1024–4096 요소에서 NVIDIA V100과 P100 GPU에서 각각 이론적 피크 성능의 77–92%를 달성하였다.
  • 모든 테스트 구성에서 이전 GPU 버전의 Nekbone 대비 6–10% 향상된 성능을 기록하였다.
  • 2차원 스레드 구조는 효과적인 루프 분할과 함께 공유 메모리 및 레지스터의 더 나은 활용을 가능하게 하여 성능 향상에 기여하였다.
  • 성능 향상은 Volta 및 Pascal GPU 아키텍처 모두에서 일관되게 나타나, 강력한 이식성과 확장성을 시사한다.

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

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

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

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