Adaptive SIMD optimizations in particle-in-cell codes with fine-grain particle sorting
Particle-In-Cell (PIC) codes are broadly applied to the kinetic simulation of plasmas, from laser–matter interaction to astrophysics. Their heavy simulation cost can be mitigated by using the Single Instruction Multiple Data (SIMD) capability,or vectorization, now available on most architectures. Th...
Saved in:
Published in | Computer physics communications Vol. 244; pp. 246 - 263 |
---|---|
Main Authors | , , , , , , , , |
Format | Journal Article |
Language | English |
Published |
Elsevier B.V
01.11.2019
Elsevier |
Subjects | |
Online Access | Get full text |
Cover
Loading…
Summary: | Particle-In-Cell (PIC) codes are broadly applied to the kinetic simulation of plasmas, from laser–matter interaction to astrophysics. Their heavy simulation cost can be mitigated by using the Single Instruction Multiple Data (SIMD) capability,or vectorization, now available on most architectures. This article details and discusses the vectorization strategy developed in the code Smilei which takes advantage from an efficient, systematic, cell-based sorting of the particles. The PIC operators on particles (projection, push, deposition) have been optimized to benefit from large SIMD vectors on both recent and older architectures. The efficiency of these vectorized operations increases with the number of particles per cell (PPC), typically speeding up three-dimensional simulations by a factor 2 with 256 PPC. Although this implementation shows acceleration from as few as 8 PPC, it can be slower than the scalar version in domains containing fewer PPC as usually observed in vectorization attempts. This issue is overcome with an adaptive algorithm which switches locally between scalar (for few PPC) and vectorized operators (otherwise). The newly implemented methods are benchmarked on three different, large-scale simulations considering configurations frequently studied with PIC codes. |
---|---|
ISSN: | 0010-4655 1879-2944 |
DOI: | 10.1016/j.cpc.2019.05.001 |