n°30
Février
2015
Smilei, un code PIC performant et open source

De nombreux laboratoires du Plateau de Saclay se sont fédérés autour du projet CILEX (Centre Interdisciplinaire de la Lumière Extrême) qui hébergera le futur laser APOLLON. L’objectif est d’étudier la matière sous forme de plasma lorsqu’elle est irradiée par des lasers d’intensité extrême encore inédite. Afin d’accompagner ce très grand effort expérimental, il a été décidé de développer Smilei, un nouveau code de simulation pour lequel les physiciens bénéficient de la collaboration de nombreux acteurs experts en calcul scientifique. Et la version 1.0 vient tout juste de sortir.

La spécificité première de Smilei est qu’il est le produit d’une collaboration entre différents laboratoires, mais surtout, qu’il associe des équipes ayant des expertises très différentes et complémentaires. Le petit groupe initial de physiciens et d’experts en calcul intensif du LLR, du LULI et de la Maison de la Simulation a, en effet, été progressivement renforcé par l’IDRIS, le LRI et le LPP.

Ce projet regroupe finalement des physiciens des plasmas, des astrophysiciens, des numériciens et des spécialistes du calcul intensif. Ainsi, l’ambition de l’équipe SMILEI dépasse le seul cadre du projet CILEX. Il s’agit de développer un code permettant la simulation d’une large gamme de phénomènes physiques et qui soit capable de tirer profit au maximum des ressources de calcul intensif modernes.

Les travaux de développement du code ont démarré en janvier 2013, et il existe aujourd’hui une version permettant la simulation à une et deux dimensions de divers phénomènes issus de l’astrophysique et de la physique de l’interaction laser-plasma.

Smilei est un code Particle-In-Cell (PIC) écrit en C++. Il utilise des schémas aux différences finies pour résoudre les équations de Maxwell sur une grille cartésienne régulière. Des objets ponctuels, appelés macro-particules, servent à échantillonner l’espace des phases du plasma et se déplacent librement dans l’ensemble du domaine discrétisé par la grille de calcul en fonction des champs évalués dans leur voisinage. Une fois le déplacement des macro-particules effectué, on peut projeter sur la grille les densités de charge et de courant qu’elles portent puis résoudre à nouveau les équations de Maxwell avec ces nouveaux termes sources.

- La parallélisation est assurée dans un premier temps par une décomposition MPI classique du domaine de calcul. Des communications entre voisins sont nécessaires mais comme elles restent toujours locales, le passage à l’échelle ne pose aucun problème.

- Une parallélisation plus fine au niveau de chaque sous domaine MPI est assurée avec openMP. Les sous domaines sont divisés en paquets de cellules, appelés « clusters », et un tri des particules est effectué pour s’assurer que toutes les particules associées à un même cluster soient contiguës en mémoire. Les clusters peuvent alors être traités indépendamment les uns des autres, et en parallèle, par les threads openMP. Cette parallélisation fine en mémoire partagée est une véritable aubaine pour les cas qui présentent un fort déséquilibre de charge. Celui ci est dynamiquement réparti entre les threads et son impact sur le temps de calcul global est divisé d’autant. C’est de plus un excellent moyen de faire face à la tendance actuelle des constructeurs qui introduisent de plus en plus de cœurs dans les processeurs et remettent ainsi au goût du jour les architectures à mémoire partagée.

SMILEI a déjà fait ses preuves dans la cour des grands. Le code a bénéficié de 3 millions d’heures de calcul sur le tout nouveau calculateur OCCIGEN du CINES dans le cadre du grand challenge orchestré par GENCI pour l’arrivé de ce nouveau système qui occupe désormais la place de numéro 1 en France.

Ci-dessous figure un exemple de simulation d’accélération d’électrons par sillage laser. La figure nous montre la densité électronique à un instant donné. Cette densité correspond également à la charge locale de calcul car celle-ci est fonction de la densité de macro-particules.

On note la formation d’un « hot spot » à l’arrière (à gauche sur la figure) de la structure dite de « bulle ». Ce point de très forte densité concentre un très grand nombre de macro particules sur seulement quelques cellules et provoque un très fort déséquilibre de charge. La courbe de performance nous montre le temps d’exécution de 10 itérations au fur et à mesure de la simulation.

On voit alors clairement l’apport de la parallélisation openMP. Après 6000 itérations, au moment de la formation de la bulle, quand le hot spot apparaît, les performances en MPI pur, déjà dégradées, finissent de s’effondrer complètement alors que l’on garde de très bons résultats grâce au partage dynamique des tâches entre threads openMP.

L’attractivité de Smilei vient aussi du fait qu’il s’agit d’un projet Open-Source. C’est le ciment qui a permis de regrouper des acteurs venant d’horizons aussi différents. Le code est actuellement disponible sur le gitLab du LLR dans sa version 1.0 sortie en Novembre 2014. N’hésitez donc pas à aller le tester, à donner un retour aux développeurs, et, pourquoi pas, rejoindre vous même le groupe des « Smilers » en tant que développeur ou utilisateur régulier.

Contact :

- beck@llr.in2p3.fr 

- julien.derouillat@cea.fr 

- mickael.grech@polytechnique.edu

Arnaud BECK (LLR)