Optimisation SIMD du code Smilei

01 juin 2019 par Super Administrateur
Sur les dernières architectures de processeur Intel, la vectorisation représente une part non-négligeable de la capacité de calcul des cœurs. Les équipes de la Maison de la Simulation ont récemment optimisé les opérateurs Particle-In-Cell du code de calcul Smilei dédié à la Simulation de l’interaction laser-matière à très haut flux pour obtenir les performances les plus optimales avec la vectorisation.

L'importance de la vectorisation

Les processeurs Intel de dernière génération utilise la vectorisation dite SIMD pour Single Instruction Multiple Data. Cette technologie présente dans chaque cœur de calcul permet d'effectuer pour le même coût qu'une instruction scalaire une addition et une multiplication sur un vecteur de données allant jusqu’à 8 flottants double précision. On comprend dès lors qu'un facteur d'accélération important peut être perdu sans la vectorisation. Pour les codes fonctionnant sur CPU Intel et souhaitant atteindre les meilleures performances par cœur, être capable d'utiliser la vectorisation est essentiel. Hors sur de nombreux algorithmes, le passage du scalaire au vectoriel peut s'avérer inefficace voir tout simplement impossible en l'état (le compilateur atteignant ses limites). Il est alors nécessaire pour les développeurs de retravailler les algorithmes pour bénéficier de la vectorisation. Cela passe le plus souvent par une réécriture afin d'éviter les problèmes de mise en cache, les accès mémoires aléatoires et les concurrences d'accès.

Description de la notion de vectorisation SIMD. FMA signifie Fused Multiply Add et correspond à l'instruction qui assimile une multiplication et une addition à la fois.

L'optimisation du code Smilei

Les équipes de la Maison de la Simulation ont travaillé sur l'optimisation SIMD du code de simulation Smilei en collaboration avec les équipes scientifiques du LLR et du LULI. Le code Smilei est un code Particle-In-Cell open-source collaboratif massivement parallèle dédié principalement à la simulation de l'interaction laser-plasma mais il est aussi utilisé en astrophysique de laboratoire et en fusion.

L’optimisation du code s'est achevée dans le cadre du grand challenge Irene Joliot-Curie. Pour rappel, les grands challenges donnent accès aux machines de calcul avant leur ouverture officiel dans le but de tester le bon fonctionnement du matériel et des logiciels. Il nous a permis de tester les nouveaux opérateurs vectoriels sur des cas de production en utilisant plusieurs dizaines de millier de cœur Skylake.

Nous avons également développé une méthode de vectorisation adaptative en espace et en temps permettant de déterminer localement le plus efficace entre avoir un opérateur scalaire ou vectoriel. En effet, nous avons découvert que les opérateurs vectoriels n'avaient pas d’intérêt pour une charge faible en particules par patch, le patch étant le plus petit grain de décomposition de la grille (différence finie) en espace. Pour peu de particules, les anciens opérateurs restent les plus rapides. Cela vient du fait que la vectorisation nécessite une certaine quantité d’éléments (ici, les particules) à traiter pour être très efficace.

Ces résultats ont été publiés dans Computer Physics Communication et sont accessible en ligne sur ce lien. La vidéo ci-dessous illustre l'utilisation de la vectorisation adaptative sur de larges cas. Les simulations ont été réalisées sur le calculateur Irene Joliot-Curie.

Article publié dans Computer Physics Communication.