GPU 클러스터로 대규모 HPC 애플리케이션 포팅: GENE과 VERTEX
초록
본 논문은 플라즈마 마이크로터뷸런스 코드 GENE과 핵심 붕괴 초신성 시뮬레이션 코드 VERTEX를 NVIDIA Kepler GPU 2개와 Intel Sandy Bridge CPU 2개가 탑재된 노드에 이식한 과정을 기술한다. CUDA 기반 포팅 전략, 데이터 전송 및 연산 겹침 기법, 그리고 루프‑레벨 성능 모델링을 통해 전체 실행 시간에서 최대 2배 가량의 가속을 달성했으며, 주요 알고리즘이 PCIe 대역폭에 제한되는 점을 확인하였다.
상세 분석
이 연구는 기존에 CPU 전용으로 최적화된 두 대형 과학 코드의 GPU 이식 가능성을 실증적으로 검증한다. 먼저, 두 코드 모두 Fortran‑MPI(OpenMP) 구조를 유지하면서 핵심 연산을 C‑CUDA로 재작성했으며, CUDA‑Fortran 대신 PGI 컴파일러를 포기하고 순수 C‑CUDA를 선택한 이유는 GPU 성능은 유지하면서 CPU 부분에서 Intel 컴파일러의 최적화 이점을 살리기 위함이다. GENE에서는 비선형 항 계산이 전체 실행 시간의 60% 이상을 차지함을 프로파일링으로 확인하고, 이를 5단계(전처리, FFT, 곱셈, 역FFT, 후처리)로 분할해 각각을 독립적인 CUDA 커널으로 구현하였다. 데이터 전송은 입력 배열을 xy‑plane 단위로 청크화하여 두 개의 비동기 스트림에 할당함으로써 PCIe 전송과 커널 실행을 겹치게 하였고, 하나의 GPU가 동일 소켓 내 여러 MPI 랭크와 공유되도록 설계해 GPU 활용률을 65% 이상으로 끌어올렸다. 성능 모델링에서는 ‘xy‑plane per second’와 ‘plane transfer per second’를 지표로 삼아, PCIe 2.0 대역폭(5.7 GB/s)과 CUFFT 라이브러리의 실제 사용량을 기반으로 이론적 상한선을 도출했다. 결과적으로 Kepler K20X에서는 전송 대역폭이 병목이 되어 전체 가속률이 1.8배에 머물렀으며, Fermi M2090에서는 연산 한계가 지배적이었다. VERTEX의 경우, 방사선 전달 단계 중 ‘rate kernel’이 전체 시간의 절반을 차지함을 확인하고, 이 부분을 1차원 배열 기반의 고연산량 GPU 커널로 오프로드했다. OpenMP 스레드와 GPU 작업을 겹치도록 스케줄링함으로써 CPU와 GPU가 동시에 작동하도록 설계했으며, 약 2배의 전체 실행 시간 감소를 달성했다. 두 사례 모두 GPU 가속이 강력한 데이터 병렬성을 가진 부분에 국한될 때 효과적이며, PCIe 대역폭 제한을 극복하려면 더 많은 연산을 GPU에 옮기거나 PCIe 3.0 이상을 활용해야 함을 강조한다.
댓글 및 학술 토론
Loading comments...
의견 남기기