[논문 리뷰] LightScan: Faster Scan Primitive on CUDA Compatible Manycore Processors
LightScan는 CUDA 호환 GPU를 위한 고성능 병렬 스캔 원시 연산으로, 빠른 내부 블록 계산을 위해 워프 셰플링 명령어를 사용하고, PTX 어셈블리어를 활용해 전역적으로 일관된 L2 캐시를 통해 경량의 블록 간 통신을 실현한다. 이는 최고 2.4×의 성능 향상을 이끌어내며, 최고 257.3×의 성능 향상을 Intel TBB에 비해 달성하여 Tesla K40c GPU에서 다양한 데이터 유형과 문제 크기에서 뛰어난 성능을 입증한다.
Scan (or prefix sum) is a fundamental and widely used primitive in parallel computing. In this paper, we present LightScan, a faster parallel scan primitive for CUDA-enabled GPUs, which investigates a hybrid model combining intra-block computation and inter-block communication to perform a scan. Our algorithm employs warp shuffle functions to implement fast intra-block computation and takes advantage of globally coherent L2 cache and the associated parallel thread execution (PTX) assembly instructions to realize lightweight inter-block communication. Performance evaluation using a single Tesla K40c GPU shows that LightScan outperforms existing GPU algorithms and implementations, and yields a speedup of up to 2.1, 2.4, 1.5 and 1.2 over the leading CUDPP, Thrust, ModernGPU and CUB implementations running on the same GPU, respectively. Furthermore, LightScan runs up to 8.9 and 257.3 times faster than Intel TBB running on 16 CPU cores and an Intel Xeon Phi 5110P coprocessor, respectively. Source code of LightScan is available at http://cupbb.sourceforge.net.
연구 동기 및 목표
- CUDA 기반 GPU를 위한 더 빠른 병렬 스캔 원시 연산을 설계하여 기존 GPU 및 CPU 기반 구현을 능가하는 것.
- 전역 L2 캐시 일관성과 PTX 어셈블리어 명령어를 활용해 블록 간 통신 오버헤드를 줄이는 것.
- 원자 연산을 피하기 위해 결정적 순환 블록 분포를 통해 스레드 블록 재색인 오버헤드를 최소화하는 것.
- 스트리밍 멀티프로세서당 레지스터 사용을 극대화하여 블록 간 통신 횟수를 줄이는 것.
- 스칼라 데이터 유형을 위한 CUDA C++ 템플릿 클래스를 통해 효율적이고 일반적이고 재사용 가능한 스캔 계산을 가능하게 하는 것.
제안 방법
- 입력 배열을 겹치지 않는 데이터 블록으로 분할하고 스레드 블록에 할당하는 하이브리드 내부 블록 및 블록 간 계산 모델을 사용한다.
- 각 스레드 블록 내부의 로컬 스캔 계산을 가속화하기 위해 워프 셰플링 함수를 활용하여 중간 결과에 대한 글로벌 메모리 의존도를 감소시킨다.
- 입력 및 출력 배열에 대해 코ales스드 글로벌 메모리 접근을 사용하여 각 배열에 정확히 N번의 메모리 작업이 이루어지도록 보장한다.
- 전역적으로 일관된 L2 캐시와 PTX 수준의 병렬 스레드 실행 명령어를 활용해 경량이면서 고대역폭의 블록 간 통신을 가능하게 한다.
- 원자 연산 블랙스로 인한 스레드 블록 재색인 오버헤드를 피하기 위해 고정된 수의 스레드 블록에 대해 결정적 방식으로 데이터 블록을 순환 분배한다.
- Int32, Int64, Float, Double와 같은 기본 스칼라 데이터 유형과의 일반적 인스턴스화를 지원하기 위해 템플릿 기반 CUDA C++ 설계를 구현한다.
실험 결과
연구 질문
- RQ1메모리 접근 및 통신 패턴을 최적화함으로써 현대 CUDA GPU에서 하이브리드 내부 블록 및 블록 간 스캔 모델이 더 높은 성능을 달성할 수 있는가?
- RQ2워프 셰플링 함수와 L2 캐시 일관성의 사용이 기존 원자 또는 재귀적 블록 간 통신 방식에 비해 병렬 스캔의 성능에 어떤 영향을 미치는가?
- RQ3레지스터 포화도 및 결정적 블록 분포를 통해 계산 능력 3.0 이상인 GPU 아키텍처에서 블록 간 통신을 얼마나 줄이고 확장성을 향상시킬 수 있는가?
- RQ4다양한 데이터 유형과 문제 크기에서 CUB, Thrust, CUDPP와 같은 최적화된 GPU 라이브러리와 비교해 LightScan의 성능은 어떠한가?
- RQ5특히 Xeon Phi와 같은 멀티코어 가속기에서 Intel TBB와 같은 CPU 기반 병렬 라이브러리에 비해 LightScan가 상당한 성능 향상을 달성할 수 있는가?
주요 결과
- Tesla K40c GPU에서 LightScan는 NVIDIA Thrust에 비해 최대 2.4×, CUDPP에 비해 2.1×, ModernGPU에 비해 1.5×, CUB에 비해 1.2×의 성능 향상을 달성한다.
- 모든 테스트 데이터 유형에서 평균적으로 LightScan는 CUDPP, Thrust, ModernGPU, CUB에 비해 각각 2.0×, 2.1×, 1.5×, 1.2×의 성능 향상을 기록한다.
- 16개 CPU 코어에서 실행되는 Intel TBB에 비해 LightScan는 평균 8.4×의 성능 향상을 기록했으며 최대 8.9×까지 향상되었으며, Int32의 최고 성능은 3.1 GEPS였다.
- Intel Xeon Phi 5110P 코프로세서에서 LightScan는 TBB에 비해 평균 80.8×, 최대 257.3×의 성능 향상을 기록하여 멀티코어 가속기에서의 우수성을 입증한다.
- Tesla K40c에서 LightScan는 32비트 정수 유형에 대해 최고 25.5 GEPS, 64비트 정수 유형에 대해 12.8 GEPS, 단정밀도 부동소수점 유형에 대해 25.7 GEPS, 쌍정밀도 부동소수점 유형에 대해 13.0 GEPS의 최고 성능을 기록한다.
- TBB의 성능이 크게 저하되는 Xeon Phi에서 LightScan의 성능 우월성이 가장 두드러지며, 이는 멀티코어 가속기에서 GPU 최적화 알고리즘이 필수적임을 시사한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.