Rendre son code C 4x plus rapide sans rien faire


Vous avez un concours ou examen avec pour contrainte un programme final rapide, mais vous n’avez pas utilisé le meilleur algorithme ?

-O

Il suffit d’utiliser l’option -O (fonctionne sous gcc1 et clang2, possiblement d’autres compilateurs).

Cette option active simplement l’optimisation du code par le compilateur. Vous pouvez spécifier le niveau d’optimisation à utiliser.

Cesdits niveaux d’optimisation, quels sont-ils ?

Pour gcc, les niveaux d’optimisations sont les suivants :

  • -O0 : pas d’optimisation.
  • -O1 ou -O : le niveau le plus simple d’optimisation.
  • -O2 : optimisation modérée, j’ai souvent obtenu les meilleurs résultats avec ce niveau-ci.
  • -O3 : optimisation élevée.
  • -Os : optimisation pour la taille du fichier compilé.
  • -Ofast : ⚠ toutes les optimisations activées, mais également des optimisations qui peuvent violer les standards du langage.

N.B. : Je viens de me renseigner, et clang utilise les mêmes niveaux d’optimisation.

Attention toute fois à ne pas utiliser ces optimisations pendant le cycle de développement, car le debug peut en être erroné ou tout du moins complexifié.

Le mot de la fin

-O peut vous sauver la mise et rendre votre code plus rapide en quelques secondes.
Pour l’anecdote : ça m’a sauvé des places lors d’un concours de projets étudiants, mon algorithme donnait un résultat « moins bon », mais en le compilant à la dernière minute avec -O2, le programme était environ 2,5 fois plus rapide que ceux des autres participants ! Le classement prenait en compte le résultat pur et la vitesse d’exécution. 💯

De mon expérience personnelle, j’ai pu au maximum atteindre un temps d’exécution de ~5 secondes avec -O2 sur un programme qui en prenait ~20 au départ. (Non, je ne sors pas le 4x du titre de nulle part !)


Je ne sais toujours pas comment terminer mes articles.
« Celui qui mange beaucoup le matin, mangera souvent moins à midi. »