1 points par GN⁺ 2023-07-07 | 1 commentaires | Partager sur WhatsApp
  • Un article qui explore les possibilités d’optimisation d’une boucle en code C générée par Clang
  • La boucle incrémente ou décrémente un nombre en fonction des caractères d’une chaîne.
  • L’auteur réorganise la boucle pour l’optimiser autour des caractères p et s plutôt que du terminateur null.
  • L’auteur supprime les branchements conditionnels en utilisant de l’arithmétique et des déplacements conditionnels.
  • Le code optimisé atteint un gain de performance significatif de 6,73 fois par rapport au code d’origine.
  • L’auteur essaie également d’autres techniques d’optimisation, mais constate qu’elles ralentissent le code.
  • La configuration de benchmark comprend un CPU AMD Ryzen 5 5625U ainsi que les dernières versions de Clang et GCC.
  • La conclusion est qu’un travail manuel et des optimisations en assembleur peuvent, dans certains cas, apporter des gains de performance importants.

1 commentaires

 
GN⁺ 2023-07-07
Avis Hacker News
  • Le code d’origine peut être optimisé en utilisant des instructions if au lieu d’une instruction switch.
  • Une autre version optimisée du code peut utiliser des instructions sans branchement sete/cmov et atteindre la même vitesse que le code assembleur optimisé.
  • Une version vectorisée du code peut être encore plus rapide si possible, en utilisant les instructions AVX-512.
  • D’autres processeurs peuvent avoir des caractéristiques de performance différentes selon les branchements.
  • Le langage C a été conçu à l’origine pour permettre de traduire facilement du code de niveau système entre différentes plateformes, en sacrifiant certaines fonctionnalités pour cela.