L'optimisation est l'acte d'améliorer une méthode ou une conception. En programmation, l'optimisation prend généralement la forme d'une augmentation de la vitesse d'un algorithme ou d'une réduction des ressources nécessaires. Une autre signification de l'optimisation est les algorithmes d'optimisation numérique utilisés dans l'apprentissage automatique.

En informatique, une optimisationde programme ou de logiciel est le processus de modification d'un système pour en faire fonctionner certains aspects. plus efficacement ou utiliser moins de ressources. En général, un programme informatique peut être optimisé de manière à s’exécuter plus rapidement ou à fonctionner avec moins de mémoire ou d’autres ressources, ou à consommer moins d’énergie Wikipedia. D'autres ressources peuvent inclure l'accès au disque, la bande passante de communication, les performances vidéo et la réactivité de l'interface utilisateur.

Les objectifs courants d'optimisation liés aux logiciels sont les suivants:

  • Concevez ou efficacité de l'algorithme.
  • Niveau du code source. Par exemple, Duff's Device.
  • Niveau de construction ou indicateurs d'optimisation, échangeant souvent le temps de construction pour une efficacité d'exécution.
  • Niveau de compilation; choisir le meilleur compilateur.
  • Niveau d'assemblage. Le meilleur mappage de machine à un problème.
  • Durée. Les exemples incluent les paramètres de machine virtuelle et optimisation guidée par profil.

Les objectifs d'optimisation moins strictement liés au logiciel sont:

  • Optimisation des requêtes. Il s'agit du processus d'amélioration de la conception d'une requête de base de données pour augmenter les performances. Utilisez la balise query-optimizationpour les questions sur l'optimisation des requêtes.
  • Optimisation numérique. Utilisez la balise mathematical-optimizationpour les questions sur l'optimisation numérique.
  • Bonheur enseignant / collègue. Écrire un logiciel d'une manière telle qu'une personne importante ou un groupe de personnes apprécie le code lu par un être humain, par ex. pour plus de clarté et de facilité d'entretien.

L'optimisation des performances augmente souvent la complexitédu programme et réduit sa maintenabilité. Réduire les besoins en espace signifie souvent que le code s'exécute plus lentement, tandis que le rendre plus rapide augmente souvent ses besoins en mémoire, bien que l'optimisation algorithmique la plus profonde s'améliore souvent sur les deux aspects.

Un danger souvent cité est «l'optimisation prématurée» («la racine de tout mal», comme dit le proverbe). En revanche, l'effet le plus spectaculaire sur l'optimisation se situe au niveau de la conception via efficacité de l'algorithme; il s'agit du premier stade de développement, ce qui semble donc être un paradoxe.

La façon de résoudre ce paradoxe est de considérer l'ordre correct des implémentations. La correction doit venir en premier (commençant ainsi par le code le plus simple et le plus évident), les améliorations algorithmiques en second, les "micro-optimisations" améliorant les performances viennent en dernier. «Optimisation prématurée» signifie se concentrer immédiatement sur les micro-optimisations avant même de formuler une solution correcte (ce qui conduit souvent à un code tout à fait erroné, bien qu'efficace); ou avant d'envisager des optimisations algorithmiques qui, si possible, éviteraient ces micro-optimisations en premier lieu.

Lorsque vous utilisez cette balise, c'est-à-dire des questions sur l'optimisation, veuillez indiquer l'objectif d'optimisation que vous avez en tête. Les listes ci-dessus illustrent que de nombreux objectifs d'optimisation possibles s'excluent mutuellement (par exemple, performances vs simplicité / maintenabilité). Il n'est donc pas possible d'optimiser pour tout; et l'optimisation sans objectif clair est un autre péril courant et rend une question trop large ou peu claire.

Voir aussi: profilingassemblycompiler