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 gcc
1 et clang
2, 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. »
voir le manuel de gcc ↩︎
voir le manuel de clang ↩︎