A portable platform for accelerated PIC codes and its application to GPUs using OpenACC
F. Hariri, T.M. Tran, A. Jocksch, E. Lanti, J. Progsch, P. Messmer, S., Brunner, G. Gheller, L. Villard

TL;DR
This paper introduces PIC_ENGINE, a portable platform for accelerating Particle-In-Cell simulations on heterogeneous architectures like GPUs using OpenACC, demonstrating significant performance gains on supercomputing systems.
Contribution
The paper presents a flexible, portable PIC simulation platform that effectively utilizes GPUs with OpenACC, enabling efficient exascale-ready computations across different architectures.
Findings
PIC_ENGINE achieves performance close to theoretical predictions.
On the Piz Daint system, GPU implementation outperforms CPU by 3.4 times.
The platform supports various parallelization strategies for different architectures.
Abstract
We present a portable platform, called PIC_ENGINE, for accelerating Particle-In-Cell (PIC) codes on heterogeneous many-core architectures such as Graphic Processing Units (GPUs). The aim of this development is efficient simulations on future exascale systems by allowing different parallelization strategies depending on the application problem and the specific architecture. To this end, this platform contains the basic steps of the PIC algorithm and has been designed as a test bed for different algorithmic options and data structures. Among the architectures that this engine can explore, particular attention is given here to systems equipped with GPUs. The study demonstrates that our portable PIC implementation based on the OpenACC programming model can achieve performance closely matching theoretical predictions. Using the Cray XC30 system, Piz Daint, at the Swiss National…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
