Leçons apprises en optimisant les convolutions avec SIMD : prédiction de branchement et problèmes du compilateur

2025-03-07

L'auteur a tenté d'optimiser les opérations de convolution en utilisant des instructions SIMD, mais a rencontré une dégradation des performances. L'implémentation initiale utilisait des chargements SIMD, des instructions FMA et des techniques d'optimisation de boucle, mais elle était plus de deux fois plus lente que la version non vectorisée. Après le débogage, le problème a été identifié comme étant dû à des instructions de branchement excessives entraînant des échecs de prédiction de branchement du CPU, et à des limites de taille de fonction inline du compilateur, empêchant l'utilisation appropriée du jeu d'instructions AVX. Enfin, en réduisant les branchements, en divisant les boucles et en utilisant correctement les attributs inline du compilateur, l'auteur a réussi à améliorer les performances au niveau attendu. Cette étude de cas illustre la complexité des architectures modernes de CPU et les détails à prendre en compte dans l'optimisation des performances.

Lire plus
Développement