GPU 모델별 타일링 최적화 성능 분석

본 논문은 이미지 보간 알고리즘을 사례로 삼아 CUDA 환경에서 타일링 기법을 적용했을 때 GPU 모델에 따라 성능 차이가 발생함을 실험적으로 입증한다 두 종류의 최신 GPU와 서로 다른 CUDA SDK 버전을 사용하여 동일 코드를 실행하고 최적 타일 크기와 메모리 접근 패턴이 모델마다 달라야 함을 보여준다

GPU 모델별 타일링 최적화 성능 분석

초록

본 논문은 이미지 보간 알고리즘을 사례로 삼아 CUDA 환경에서 타일링 기법을 적용했을 때 GPU 모델에 따라 성능 차이가 발생함을 실험적으로 입증한다
두 종류의 최신 GPU와 서로 다른 CUDA SDK 버전을 사용하여 동일 코드를 실행하고 최적 타일 크기와 메모리 접근 패턴이 모델마다 달라야 함을 보여준다

상세 요약

타일링은 CUDA 커널에서 전역 메모리 접근을 최소화하고 공유 메모리를 효율적으로 활용하기 위한 핵심 최적화 기법이다
GPU 아키텍처는 세대별로 SM 수, 레지스터 파일 크기, 공유 메모리 용량, 메모리 대역폭, 워프 스케줄링 정책 등이 달라진다
이러한 하드웨어 차이는 동일한 타일 크기를 적용했을 때 발생하는 레지스터 압박, 공유 메모리 충돌, 워프 발동 지연 등에 직접적인 영향을 미친다
논문에서는 먼저 기본 구현을 작성하고 타일 크기를 8×8 16×16 32×32 로 변형하면서 실행 시간을 측정하였다
첫 번째 GPU는 Compute Capability 7.5 를 갖는 최신 RTX 2070 이며 L2 캐시가 크게 확장되어 있다
두 번째 GPU는 Compute Capability 6.1 를 갖는 GTX 1060 으로 L2 캐시가 작고 메모리 대역폭이 낮다
실험 결과 RTX 2070에서는 32×32 타일이 공유 메모리 사용량을 최적화하면서도 워프당 연산량을 충분히 확보해 가장 높은 처리량을 보였다
반면 GTX 1060에서는 32×32 타일이 공유 메모리 한도를 초과해 레지스터 스필오버가 발생하고 메모리 병목이 심화돼 16×16 타일이 오히려 더 효율적이었다
또한 CUDA SDK 10.2 와 11.4 사이의 컴파일러 최적화 차이도 눈에 띄었다
SDK 11.4에서는 자동 벡터화와 루프 언롤링이 강화돼 작은 타일에서도 일정 수준의 성능 향상이 있었지만, 큰 타일에서는 오히려 레지스터 사용량이 급증해 성능이 감소하였다
이러한 결과는 타일링 최적화가 단순히 이론적 메모리 접근 최소화만을 목표로 하면 안 되며, 각 GPU 모델의 물리적 제약과 컴파일러 버전이 복합적으로 고려되어야 함을 시사한다
특히 공유 메모리와 레지스터의 비율, 워프 스케줄링 정책, 메모리 계층 구조를 정량적으로 모델링하고 자동 튜닝 프레임워크에 반영하면 모델 간 이식성을 크게 향상시킬 수 있다


📜 논문 원문 (영문)

🚀 1TB 저장소에서 고화질 레이아웃을 불러오는 중입니다...