[논문 리뷰] 8 Steps to 3.7 TFLOP/s on NVIDIA V100 GPU: Roofline Analysis and Other Tricks
이 논문은 계층적 루프라이닝 분석과 Nsight Compute를 활용하여 NVIDIA V100 GPU에서 이중 정밀도 성능을 3.7 TFLOP/s로 달성하기 위한 여덟 가지 최적화 단계를 제시한다. 고도의 레지스터 사용, 낮은 할당률, 복잡한 데이터 접근, 장시간 지연 지연 명령어 등의 문제를 다루며, 특히 레지스터 제한, 루프 재정렬, 캐시 블로킹, FMA 비율 인식 최적화를 통해 58%의 FMA 비율을 기반으로 한 맞춤형 피크의 70% 성능을 달성하여 고성능 계산(HPC) 커널 최적화를 위한 실용적인 프레임워크를 입증한다.
Performance optimization can be a daunting task especially as the hardware architecture becomes more and more complex. This paper takes a kernel from the Materials Science code BerkeleyGW, and demonstrates a few performance analysis and optimization techniques. Despite challenges such as high register usage, low occupancy, complex data access patterns, and the existence of several long-latency instructions, we have achieved 3.7 TFLOP/s of double-precision performance on an NVIDIA V100 GPU, with 8 optimization steps. This is 55% of the theoretical peak, 6.7 TFLOP/s, at nominal frequency 1312 MHz, and 70% of the more customized peak based on our 58% FMA ratio, 5.3 TFLOP/s. An array of techniques used to analyze this OpenACC kernel and optimize its performance are shown, including the use of hierarchical Roofline performance model and the performance tool Nsight Compute. This kernel exhibits computational characteristics that are commonly seen in many high-performance computing (HPC) applications, and are expected to be very helpful to a general audience of HPC developers and computational scientists, as they pursue more performance on NVIDIA GPUs.
연구 동기 및 목표
- NVIDIA V100 GPU에서 실행되는 BerkeleyGW 코드의 이중 정밀도 HPC 커널에서 성능 저하 요인을 해결하기 위해.
- 고도의 레지스터 압박, 복잡한 메모리 접근, 장시간 지연 지연 명령어를 겪는 과학적 커널에 대해 체계적이고 다단계 최적화 과정을 보여주기 위해.
- 계층적 루프라이닝 분석과 Nsight Compute가 성능 저하 요인을 식별하고 해결하는 데 효과적인지 검증하기 위해.
- 이중 정밀도 워크로드에 대한 이론적 피크 추정치를 초월하여 FMA 비율 기반으로 실질적인 성능 한계를 설정하기 위해.
- 유사한 계산 특성을 가진 다른 HPC 응용 프로그램에 적용 가능한 이식 가능한 방법론을 제공하기 위해.
제안 방법
- 산술 밀도와 메모리 대역폭과 관련된 성능 저하 요인을 식별하기 위해 계층적 루프라이닝 분석을 적용한다.
- Nsight Compute를 사용하여 명령어 수준 통계 및 캐시 히트 비율을 포함한 세부 성능 메트릭을 수집한다.
- 컴파일러 플래그(-Mcuda=maxregcount:128) 또는 OpenACC 문장(vector_length(512))를 통해 레지스터 사용량을 줄여 할당률을 증가시킨다.
- 산술 밀도를 향상시키고 메모리 계층을 더 효과적으로 활용하기 위해 루프를 재정렬한다.
- 캐시 블로킹(tiling)을 구현하여 데이터 재사용을 향상시키고 L1/L2 캐시 히트 비율을 개선한다.
- 장시간 지연 지연 명령어(예: 역수 계산)를 더 짧은 지연 지연 대체 명령어로 대체하여 명령어 수준의 지연을 감소시킨다.
실험 결과
연구 질문
- RQ1복잡한 데이터 접근과 고정밀 산술을 가진 GPU 커널에서 계층적 루프라이닝 분석을 효과적으로 적용하여 성능 저하 요인을 식별할 수 있는가?
- RQ2레지스터 압박은 GPU 할당률과 성능에 어떤 영향을 미치며, 레지스터 스파이illis(스pill) 비용을 과도하게 증가시키지 않으면서 어떻게 완화할 수 있는가?
- RQ3불규칙한 메모리 접근 패턴을 가진 커널에서 루프 재정렬과 캐시 블로킹을 통해 얼마나 높은 수준의 성능 향상을 달성할 수 있는가?
- RQ4FMA 비율은 이중 정밀도 GPU 커널의 실질적인 성능 한계에 어떤 영향을 미치며, 이는 이론적 피크 추정치를 校정하는 데 어떻게 활용될 수 있는가?
- RQ5컴파일러 수준 최적화, 알고리즘 재구성, Nsight Compute와 같은 프로파일링 도구의 조합이 실제 HPC 워크로드에서 일관되게 높은 성능 향상을 이끌어낼 수 있는가?
주요 결과
- 최적화된 커널은 단일 NVIDIA V100 GPU에서 이중 정밀도 성능을 3.7 TFLOP/s로 달성하여 원래의 2.3 TFLOP/s 대비 3배의 성능 향상을 보였다.
- 최종 성능은 1312 MHz의 정격 주파수에서 이론적 FP64 피크(6.7 TFLOP/s)의 55%에 해당했다.
- 측정된 58%의 FMA 비율을 기반으로 한 더 현실적인 피크인 5.3 TFLOP/s의 70%에 해당하는 성능을 달성했다.
- Nsight Compute 프로파일링을 통해 캐시 블로킹과 루프 재정렬이 L1 및 L2 캐시 히트 비율을 크게 향상시켰음을 확인했다.
- 레지스터 제한을 통해 SM당 할당률이 16에서 32 워프로 증가했으며, 레지스터 스파이illis가 발생했음에도 불구하고 지연 숨기기 성능 향상으로 인해 이로 인한 손해가 상쇄되었다.
- 아키텍처 인식(예: FMA 활용도)과 Nsight Compute를 통한 반복적 프로파일링의 조합이 복잡한 과학적 커널에서 고성능을 달성하는 데 필수적이었다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.