GPU offloading

To support recent supercomputers, Smilei has been ported on GPU (graphical processing units). Initially built to handle complex graphical output and related to rendering and video games, GPUs appeared only relatively recently in the HPC ecosystem. Unlike CPUs, GPUs can do much smaller sets of tasks with massive data throughput.

The most powerful supercomputers are almost all based on GPU acceleration.


Supported features

  • Both AMD’s GPUs and Nvidia’s GPUs are supported

  • Cartesian geometry in 1D, 2D and in 3D, at order 2 of interpolation

  • Diagnostics: Field, Probe, Scalar, ParticleBinning, TrackParticles

  • Moving Window

  • Boundary conditions for Fields: periodic, reflective and silver-muller are supported (no PML or BM)

  • Boundary conditions for Particles: periodic, Reflective, thermal, remove and stop are supported

  • Collisions (without ionization or nuclear reactions)

A few key features remain to be implemented:

  • AM geometry

  • Ionization

  • PML boundaries

  • Envelope solver

  • QED processes


Guidelines

Make sure to read the compilation documentation and the running documentation.

On a GPU-equiped cluster, the number of MPI processes (or tasks) must be equal to the number of GPUs, and each MPI process must be bound to one GPU.

Splitting your simulation domain works somewhat differently from CPU simulations. Instead of splitting the simulation box in many small patches, it is recommended to use only one patch per GPU to obtain the best performance. However, for better memory management, testing other configurations with a few patches per GPU is encouraged.