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.-O1ou-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 ↩︎