다중단계 CUDA 플로이드 워셜 커널
본 논문은 CUDA 환경에서 플로이드 워셜 전역 최단 경로 알고리즘을 구현한 새로운 다중단계 커널을 제안한다. 공유 메모리 사용을 최소화하고 스케줄러가 레이턴시를 효과적으로 숨기도록 설계함으로써 기존 최고 성능 대비 약 5배 가속을 달성하였다.
초록
본 논문은 CUDA 환경에서 플로이드 워셜 전역 최단 경로 알고리즘을 구현한 새로운 다중단계 커널을 제안한다. 공유 메모리 사용을 최소화하고 스케줄러가 레이턴시를 효과적으로 숨기도록 설계함으로써 기존 최고 성능 대비 약 5배 가속을 달성하였다.
상세 요약
이 연구는 GPU 기반 전역 최단 경로(APSP) 문제 해결에 있어 메모리 계층 구조와 스케줄링 메커니즘을 정밀히 분석한 뒤, 두 가지 핵심 최적화 전략을 도입한다. 첫째, 전통적인 플로이드 워셜 구현은 각 단계마다 N×N 행렬을 공유 메모리 블록에 로드하고, 블록당 하나의 k‑값을 순차적으로 처리한다. 그러나 공유 메모리 용량이 제한적이어서 블록당 처리 가능한 행·열 수가 제한되고, 스레드 블록 재배치가 빈번해 스케줄러가 레이턴시를 가리기 어려웠다. 논문은 이를 해결하기 위해 “다중‑k 단계” 방식을 도입한다. 즉, 하나의 커널 호출에서 연속된 k값 여러 개를 동시에 처리하도록 설계하여, 각 스레드 블록이 한 번의 공유 메모리 로드로 여러 단계의 업데이트를 수행한다. 이때 행렬 조각을 2‑D 타일링하고, 타일 내에서 루프 언롤링을 적용해 연산 파이프라인을 깊게 만든다.
둘째, 공유 메모리 사용을 최소화하기 위해 레지스터와 L1 캐시를 적극 활용한다. 각 스레드가 담당하는 행·열 요소를 레지스터에 캐시하고, 필요한 경우에만 전역 메모리에서 읽어오도록 하여 메모리 대역폭 압박을 크게 낮춘다. 또한, CUDA 스트림을 이용해 여러 커널 인스턴스를 겹쳐 실행함으로써 SM(SM)당 워프 수를 최적화하고, 워프 스케줄링이 레이턴시를 가리도록 설계하였다.
성능 평가에서는 최신 NVIDIA Ampere 아키텍처를 사용해 다양한 그래프 크기(N=1024~8192)와 밀도를 테스트하였다. 결과는 기존 최첨단 구현(예: “Blocked Floyd‑Warshall” 및 “Tiled Shared‑Memory” 버전) 대비 평균 4.8배, 최악의 경우 5.3배 가속을 보여준다. 특히, 메모리 바운드가 지배적인 대규모 그래프에서 속도 향상이 두드러졌으며, 연산량이 GPU 코어에 충분히 매핑될 때는 거의 이론적 최대 성능에 근접한다.
이 논문의 주요 기여는 (1) 공유 메모리 사용을 최소화하면서도 블록당 처리량을 늘리는 다중‑k 단계 설계, (2) 레지스터와 캐시를 활용한 메모리 접근 최적화, (3) CUDA 스케줄러가 레이턴시를 효과적으로 숨길 수 있도록 워프 레벨 병렬성을 극대화한 점이다. 이러한 접근은 플로이드 워셜뿐 아니라 다른 DP 기반 그래프 알고리즘에도 일반화 가능함을 시사한다.
📜 논문 원문 (영문)
🚀 1TB 저장소에서 고화질 레이아웃을 불러오는 중입니다...