Analyse de performances LLVM-MCA : pièges de l’optimisation de la vectorisation
L’auteur a rencontré un problème de baisse de performances lors de la vectorisation de code à l’aide d’ARM NEON. Le code initial utilisait cinq instructions de chargement (5L), tandis que la version optimisée utilisait deux instructions de chargement et trois instructions d’extension (2L3E) pour réduire les accès mémoire. Curieusement, la version 2L3E était plus lente. L’utilisation de LLVM-MCA pour l’analyse de performances a révélé que 2L3E provoquait des goulots d’étranglement dans les unités d’exécution du processeur, une utilisation inégale des ressources et des dépendances d’instructions plus fortes, entraînant une régression des performances. La version 5L a offert de meilleures performances grâce à une utilisation plus équilibrée des ressources et à des instructions de chargement indépendantes. Cette étude de cas souligne comment des optimisations apparemment judicieuses peuvent entraîner une baisse des performances si l’on ne tient pas compte de la contention des ressources du processeur et des dépendances des instructions ; LLVM-MCA s’avère un outil précieux pour analyser ces problèmes.