11.3.6.3.2 : Retour d'expérience


\smilei est un code open source utilisé par une communauté internationale assez vaste et contrastée. Les types de cas physiques simulés et les systèmes utilisés pour faire tourner le code peuvent être très différents, les problématiques de portabilité sont donc une priorité. Il faut également prendre garde à ce que les optimisations apportées au code pour une certaine gamme de paramètres ne soit pas pénalisantes pour d'autres régimes. Ainsi, pour la vectorisation, nous avons décidé d'utiliser principalement l'auto-vectorisation (vectorisation par le compilateur voir 11.3.4.1).

Adopter des structures de données appropriées et donner quelques indices au compilateur(\macro\#pragma openmp simd, memalign,... ) pour quelques boucles récalcitrantes suffit à avoir de bonnes performances dès lors que l'algorithme se prête bien à la vectorisation. Malheureusement, ce n'est pas le cas pour les parties les plus coûteuses d'un code PIC optimisé standard, même en 2019. Le gros du travail a donc été pour nous de réécrire les algorithmes afin de les rendre auto-vectorisables. Ces algorithmes sont a priori moins performants sur des machines complètement scalaires (sans vectorisation), mais adossés à une technique de tri de particules adéquate, ils permettent néanmoins un gain d'un facteur 2 environ sur les machines qui possèdent des instructions vectorielles.

Le choix a été fait de vectoriser sur les particules, car ce sont elles qui portent la plus grosse charge de calcul dans la plupart des cas. Cependant, il peut arriver que le nombre de particules soit trop faible pour remplir un registre vectoriel, les performances devenant alors moins bonnes qu'avec l'algorithme scalaire standard. Pour pallier ce problème, nous avons mis au point une technique de choix local de méthode de calcul. À l'exécution, et dynamiquement dans le temps et l'espace, le logiciel est capable d'évaluer quelle méthode sera la plus efficace et l'appliquer.

Ces travaux ont été publiés dans~[26]Adaptive SIMD optimizations in particle-in-cell codes with fine-grain particle sorting, 2019, A. Beck et. al..