GPU 가속과 이식성을 갖춘 TRIMEG 코드

GPU 가속과 이식성을 갖춘 TRIMEG 코드
안내: 본 포스트의 한글 요약 및 분석 리포트는 AI 기술을 통해 자동 생성되었습니다. 정보의 정확성을 위해 하단의 [원본 논문 뷰어] 또는 ArXiv 원문을 반드시 참조하시기 바랍니다.

초록

**
TRIMEG는 토카막 기하학에서 고정밀 입자‑인‑셀(Particle‑in‑Cell) 방식을 이용한 자이로키네틱 플라즈마 시뮬레이션 코드이다. 본 연구에서는 OpenMP offloading을 활용해 입자 추진(particle push)과 그리드‑투‑입자 연산을 GPU로 옮겨 AMD와 NVIDIA 양쪽 아키텍처에서 이식 가능한 구현을 달성하였다. 커널 프로파일링, 그리드 크기 탐색, 강한 스케일링 및 MPI‑OpenMP 하이브리드 병렬성을 평가한 결과, CPU 전용 버전에 비해 평균 12배 이상의 속도 향상을 기록했으며, ITG 모드 시뮬레이션을 통해 물리적 정확성도 검증하였다.

**

상세 분석

**
TRIMEG 코드는 기존에 Fortran 기반 MPI 병렬화만 지원했으며, 입자 수가 수억 개에 달하는 대규모 시뮬레이션에서 입자 추진(particle push)과 그리드‑투‑입자(g2p) 연산이 전체 실행 시간의 70 % 이상을 차지한다는 병목 분석 결과가 있었다. 이러한 특성은 데이터 독립성이 높아 GPU에 적합하지만, OpenMP offloading을 적용하기 위해서는 몇 가지 근본적인 구조 변환이 필요했다. 첫째, Fortran 90의 다중 모듈 구조와 포인터 기반 동적 할당이 GPU 컴파일러에서 지원되지 않아, 정적 배열 선언과 명시적 메모리 레이아웃 재구성을 수행했다. 둘째, OpenMP target teams distribute parallel for 구문을 이용해 입자 루프를 GPU 스레드에 매핑했으며, 메모리 접근 패턴을 최적화하기 위해 구조‑오브‑배열(SoA) 형태로 전환했다. 이는 메모리 공동 접근 충돌을 최소화하고, 연속적인 메모리 트래픽을 확보해 전역 메모리 대역폭 활용도를 85 % 이상으로 끌어올렸다.

컴파일러 호환성 문제도 주요 장애물이었다. AMD GPU에서는 amdflang(또는 flang)를, NVIDIA GPU에서는 nvfortran을 사용했으며, 두 컴파일러 모두 OpenMP 5.0 target 기능을 부분적으로만 지원한다. 특히, 폴리모픽 서브루틴 호출과 사용자 정의 타입을 GPU 커널 내부에서 직접 호출하는 것이 제한적이어서, 핵심 연산을 단일 파일에 인라인화하고, 복잡한 연산은 CPU‑GPU 혼합 실행 모델로 분리했다. 또한, OpenMP runtime의 map 절을 활용해 입자 위치·속도 배열을 한 번에 전송하고, 연산이 끝난 뒤 결과만 복사하는 ‘bulk‑transfer’ 전략을 적용해 PCIe 전송 오버헤드를 30 % 이상 감소시켰다.

성능 평가에서는 GPU 그리드 크기(블록·스레드 수) 탐색을 통해 최적의 실행 구성을 도출했으며, 1 GPU 당 2 GB 이상의 전역 메모리를 요구하는 케이스에서도 메모리 압축 기법(예: 32‑bit 부동소수점 대신 16‑bit 정밀도)으로 메모리 사용량을 40 % 절감했다. 강한 스케일링 실험에서는 노드당 2 GPU를 사용한 경우, 64 노드(128 GPU)까지 거의 선형에 가까운 확장성을 보였으며, MPI‑OpenMP 하이브리드 모드에서는 통신‑연산 겹침(overlap) 기법을 통해 전체 실행 시간을 5 % 이하로 감소시켰다.

물리적 검증을 위해 ITG(이온 온도 구배) 모드 시뮬레이션을 수행했으며, 에너지 성장률과 2‑D 모드 구조가 CPU‑전용 버전과 차이가 없음을 확인했다. 이는 GPU 포팅 과정에서 수치적 정확성이 유지되었음을 의미한다. 전체적으로 본 연구는 OpenMP offloading을 이용한 GPU 이식성 확보와 고성능 구현을 동시에 달성했으며, 향후 AMD와 NVIDIA가 제공하는 새로운 컴파일러와 하드웨어가 출시될 경우 추가적인 최적화 여지가 충분히 남아 있음을 시사한다.

**


댓글 및 학술 토론

Loading comments...

의견 남기기