GPU 가속 중력 트리코드 구현
초록
본 논문은 NVIDIA CUDA 기반 GPU에서 실행되는 고속 중력 트리코드를 제안한다. 트리 구조와 다중극 모멘트는 CPU에서 구축하고, 트리 탐색과 상호작용 리스트 평가를 GPU에서 수행한다. 이를 통해 1백만 입자에 대해 θ≈0.5인 경우 1초 이내에 힘을 계산하며, 지속적인 성능은 약 100 GFLOP/s, 데이터 전송 속도는 약 50 GB/s에 달한다. 사용이 편리한 인터페이스와 오픈 소스 배포도 제공한다.
상세 분석
이 연구는 전통적인 Barnes‑Hut 트리코드의 구조를 그대로 유지하면서, 계산 집약적인 힘 평가 단계만을 GPU로 옮겨 병렬성을 극대화한다는 전략적 선택을 한다. 트리 구축과 다중극(moment) 계산은 메모리 접근 패턴이 불규칙하고 분기(branch)가 많아 CPU가 효율적이므로 호스트에서 수행한다. 반면, 트리 탐색 결과로 얻어지는 상호작용 리스트는 각 입자마다 독립적인 연산이 가능하므로, CUDA 스레드 블록에 입자를 할당하고 리스트를 순차적으로 읽어들여 다중극 항을 합산한다. 이때 데이터 구조는 구조체 배열(AOS) 대신 구조체의 필드를 별도 배열(SOA) 형태로 배치해 메모리 연속성을 확보하고, 공유 메모리를 이용해 동일 블록 내 입자들의 다중극 데이터를 캐시한다.
알고리즘의 핵심 파라미터인 개방각 θ는 정확도와 성능 사이의 트레이드오프를 조절한다. θ≈0.5일 때 평균 깊이 7~8 수준의 트리를 형성하고, 상호작용 리스트 길이는 전체 입자 수의 약 0.1배 수준으로 축소된다. GPU에서는 각 스레드가 리스트 항목을 하나씩 처리하면서 부동소수점 연산을 수행하므로, FLOP당 메모리 전송 비율이 높아져 100 GFLOP/s 수준의 지속적인 처리량을 달성한다.
전송 병목을 최소화하기 위해 CPU‑GPU 간 데이터 이동을 비동기 스트림으로 겹치게 설계했으며, 입력 입자 좌표와 질량, 그리고 트리 노드의 다중극 계수를 한 번에 전송한다. 전송 대역폭은 PCI‑Express 2.0 기준 약 50 GB/s에 도달했으며, 이는 전체 실행 시간의 5% 미만에 불과하다. 또한, 코드가 단일 GPU에서 1 M 입자를 1초 내에 처리할 수 있다는 실험 결과는 기존 CPU 전용 트리코드 대비 10배 이상 가속을 의미한다.
한계점으로는 트리 깊이가 지나치게 커지면 리스트 길이가 급증해 GPU 메모리 사용량이 비효율적으로 늘어날 수 있다는 점과, 다중극 차수를 2차 이상으로 확장하면 공유 메모리 요구량이 급증해 스레드 블록 규모를 제한한다는 점을 들 수 있다. 향후 연구에서는 다중 GPU 간 트리 파티셔닝, 동적 로드 밸런싱, 그리고 고차 다중극 전개를 위한 텍스처 메모리 활용 등을 통해 확장성을 더욱 높일 계획이다.
댓글 및 학술 토론
Loading comments...
의견 남기기