[논문 리뷰] High Performance Implementation of Boris Particle Pusher on DPC++. A First Look at oneAPI
이 논문은 Hi-Chi 프레임워크에서 최적화된 C++ 코드로 구현된 고성능 DPC++ 버전의 Boris 입자 푸시 알고리즘을 제시하며, Intel Xeon CPU에서 평균 약 10% 이하의 성능 손실로 거의 동일한 성능을 달성함을 보여주고, 놀랍도록 양호한 최초 성능을 Intel GPU에서도 기록함(예: Iris Xe Max는 SoA 레이아웃에서 1.00 NSPS 기록). 이는 oneAPI가 고성능 플라즈마 시뮬레이션 코드를 이질적 아키텍처 간에 이식 가능하게 만들며, GPU 전용 최적화를 거의 필요로 하지 않는 잠재력을 증명한다.
New hardware architectures open up immense opportunities for supercomputer simulations. However, programming techniques for different architectures vary significantly, which leads to the necessity of developing and supporting multiple code versions, each being optimized for specific hardware features. The oneAPI framework, recently introduced by Intel, contains a set of programming tools for the development of portable codes that can be compiled and fine-tuned for CPUs, GPUs, FPGAs, and accelerators. In this paper, we report on the experience of porting the implementation of Boris particle pusher to oneAPI. Boris particle pusher is one of the most demanding computational stages of the Particle-in-Cell method, which, in particular, is used for supercomputer simulations of laser-plasma interactions. We show how to adapt the C++ implementation of the particle push algorithm from the Hi-Chi project to the DPC++ programming language and report the performance of the code on high-end Intel CPUs (Xeon Platinum 8260L) and Intel GPUs (P630 and Iris Xe Max). It turned out that our C++ code can be easily ported to DPC++. We found that on CPUs the resulting DPC++ code is only ~10% on average inferior to the optimized C++ code. Moreover, the code is compiled and run on new Intel GPUs without any specific optimizations and shows the expected performance, taking into account the parameters of the hardware.
연구 동기 및 목표
- 이질적 컴퓨팅 환경에서 oneAPI를 사용해 고성능 C++ 입자 푸셔를 DPC++로 이식할 수 있는지의 타당성과 성능을 평가하는 것.
- 수작업 최적화된 C++ 버전과 비교해 DPC++ 구현이 Intel CPU와 GPU에서 어떻게 성능을 내는지 비교하는 것.
- DPC++에서 메모리 접근 패턴에 영향을 주는 데이터 레이아웃(AoS 대 SoA)과 NUMA 인식 메모리 접근의 성능에 미치는 영향을 평가하는 것.
- DPC++가 GPU 전용 최적화를 거의 하지 않고도 CPU와 GPU 간에 이식 가능하고 고성능의 코드를 제공할 수 있는지 여부를 확인하는 것.
제안 방법
- Hi-Chi 프레임워크에서 제공하는 최적화된 C++ 입자 푸셔를 oneAPI 프로그래밍 모델을 사용해 DPC++로 이식하는 것.
- OpenMP 기반 병렬 처리를 SYCL 기반 DPC++ 구조를 사용한 oneDNN 스타일의 병렬 커널로 대체하는 것.
- CPU와 GPU에서 메모리 접근 패턴을 평가하기 위해 AoS(구조의 배열)와 SoA(배열의 구조) 데이터 레이아웃을 모두 활용하는 것.
- 멀티 소켓 CPU에서 캐시 국소성과 메모리 대역폭을 최적화하기 위해 DPC++ 코드를 NUMA 인식 메모리 접근 방식으로 구성하는 것.
- 고성능 Intel Xeon Platinum 8260L CPU와 Intel P630/Iris Xe Max GPU에서 단일 정밀도와 이중 정밀도로 성능 벤치마크를 실행하는 것.
- CPU와 GPU 타겟 모두에서 동일한 계산 커널을 사용해 이식성과 성능 이식성을 평가하는 것.
실험 결과
연구 질문
- RQ1최소한의 변경과 수용 가능한 성능 손실로 고성능 C++ 입자 푸셔를 DPC++로 효과적으로 이식할 수 있는가?
- RQ2GPU 전용 최적화 없이 DPC++ 구현이 최적화된 CPU 코드 대비 Intel GPU에서 어떻게 성능을 내는가?
- RQ3DPC++에서 CPU와 GPU에서 데이터 레이아웃(AoS 대 SoA)이 성능에 미치는 영향은 어떠한가?
- RQ4멀티 소켓 CPU에서 NUMA 인식 메모리 접근 방식이 DPC++ 성능에 얼마나 기여하는가?
- RQ5oneAPI가 GPU 전용 최적화를 거의 하지 않고도 CPU와 GPU 간에 이식 가능하고 고성능의 HPC 코드를 제공할 수 있는가?
주요 결과
- Intel Xeon Platinum 8260L CPU에서 DPC++ 구현은 수작업 최적화된 C++ 코드보다 평균 약 10% 이하로 느리며, 성능 손실가능성을 최소화한 효과적인 이식을 보여줌.
- DPC++ 코드는 48개의 CPU 코어에서 최대 63%의 강력한 스케일링 효율을 기록하며, 병렬 처리와 NUMA 인식 메모리 접근이 잘 구현된 것으로 나타남.
- Intel Iris Xe Max GPU에서 SoA 레이아웃 단일 정밀도로 DPC++ 코드는 1.00 nanoseconds per particle per step (NSPS) 성능을 기록하며, 최적화되지 않은 이식에 비해 놀라운 성능을 기록함.
- GPU에서 AoS와 SoA 레이아웃 간 성능 차이는 50% 이상이었음(예: Iris Xe Max에서 2.10 vs. 1.00 NSPS), 이는 GPU 메모리 접근 패턴에서 데이터 레이아웃의 핵심적 역할을 강조함.
- GPU 전용 최적화가 없음에도 불구하고, P630 및 Iris Xe Max GPU에서 DPC++ 코드는 고성능 CPU 대비 각각 3.5–4.5× 및 1.7–2.6× 느리게 실행되었으며, 향후 최적화 잠재력이 매우 높음을 시사함.
- 결과적으로 oneAPI와 DPC++는 CPU와 GPU 간에 이식 가능하고 고성능의 HPC 코드를 가능하게 하며, 초기 이식에 필요한 노력이 최소화되고, 신규 Intel GPU 아키텍처에서 유망한 성능을 기대할 수 있음이 확인됨.
더 나은 연구,지금 바로 시작하세요
연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.