Whatcookie, un développeur de logiciels à l’origine de RPCS3, un émulateur Sony PlayStation 3 open source multiplateforme, a publié un correctif qui utilise les instructions AVX-512 et apporte une amélioration de 30% des performances de l’émulateur. Jusqu’à présent, les instructions AVX-512 n’avaient pas beaucoup de sens pour les jeux. Mais dans le cas d’un émulateur PS3, un gros fichier de registre de matériel compatible AVX-512, le parallélisme au niveau des données et le compilateur LLVM peuvent faire des merveilles.
Mais avant d’expliquer comment les instructions AVX-512 ont du sens pour RPCS3, ce que Whatcookie a expliqué dans son article de blog détaillé, faisons un petit plongeon dans l’histoire récente de l’informatique.
Lorsque vous devez émuler Cell, vous avez besoin d’un parallélisme explicite et de registres de fichiers volumineux, une combinaison que les processeurs AVX-512 proposent. Il s’avère que le compilateur LVVM choisit automatiquement le meilleur chemin de code possible, ce qui, dans le cas d’un matériel compatible AVX-512, signifie un chemin de code approprié. Pour des raisons évidentes (on parle ici d’émulation en fin de compte) ce n’est pas exactement l’idéal, tous les registres de masques ne sont pas utilisables par exemple.
AVX-512 ajoute également de nouveaux registres de masque qui peuvent éventuellement être utilisés avec des instructions codées EVEX », a écrit Whatcookie. « Il existe de nouvelles instructions de comparaison qui génèrent un masque dans les registres de masque à la suite d’une comparaison entre vecteurs. Lorsqu’un registre de masque est utilisé comme opérande, tous les éléments non sélectionnés par le masque seront soit mis à zéro, soit laisseront la valeur existante dans le registre de destination intacte. Il y a 8 registres de masque, à travers k0 – k7, cependant seuls k1 – k7 peuvent être utilisés pour masquer les choses, car k0 se comporte implicitement comme si tous les éléments étaient sélectionnés.
Néanmoins, les chiffres parlent d’eux-mêmes. Une amélioration des performances de 30 % est significative. Certains peuvent se demander pourquoi se soucier de ce type d’optimisation compte tenu du fait que nous sommes déjà bien au-dessus de 120 images par seconde sur notre meilleur processeur de jeu, Alder Lake Core i9-12900K d’Intel ? La réponse est qu’il y aura des machines de moindre puissance qui bénéficieront tout de même de cette optimisation.
Lorsque Sony a présenté sa PlayStation 3 basée sur le processeur Cell doté d’un cœur d’alimentation à usage général et de huit éléments de traitement synergiques (SPE), une architecture de jeu d’instructions propriétaire avec une exécution dans l’ordre et une organisation SIMD 128 bits, l’industrie du jeu n’était pas exactement impressionné puisque Cell était tellement différent des processeurs conventionnels de 2006. Quelque chose de similaire est arrivé aux instructions AVX-512 d’Intel introduites avec ses accélérateurs de superordinateur Xeon Phi ‘Knights Landing’ de 2013 et ajoutées plus tard aux processeurs de bureau Skylake-X (et la génération appropriée de Xeon Scalable ).
Le niveau de thread (multi-cœur/multi-thread) et le parallélisme au niveau des données (SIMD) sont exceptionnellement bons pour le calcul haute performance (HPC), les centres de données, le codage et les charges de travail de cryptage, et même les jeux, mais ils sont parfois difficiles à exploiter. La base matérielle, la complexité du code, les coûts, le délai de mise sur le marché et de nombreuses autres considérations incitent à ne pas investir de ressources dans le développement de logiciels qui utiliseraient chaque innovation CPU (ou GPU) côté client. Cette approche des jeux vidéo est considérée comme assez bonne, ce qui est l’une des raisons pour lesquelles Microsoft et Sony sont sur x86 (avec AVX2, mais sans AVX-512) avec une architecture graphique Radeon conventionnelle.