Analyse des performances

En mesurant la vitesse de calcul avec la petite boucle ci-dessus, le temps reste presque nul même pour N grand. Quelle est la cause la plus probable ?

start = now();
for (i = 0; i < N; i++)
    x = a * b + i;
end = now();
  1. ALe CPU dispose d'une instruction spéciale qui termine le calcul instantanément
  2. BLa valeur de x n'étant pas utilisée ensuite, le compilateur a supprimé le calcul de la boucle comme inutile
  3. CLa fonction d'horloge est défectueuse
Afficher la réponse et l'explication

Réponse : B. La valeur de x n'étant pas utilisée ensuite, le compilateur a supprimé le calcul de la boucle comme inutile

Un compilateur avec optimisations activées supprime les calculs dont le résultat n'est pas utilisé (code mort), ou remplace le résultat d'une boucle par une constante précalculée. Ainsi, dans un microbenchmark isolant une petite portion de code, le calcul à mesurer peut ne pas être réellement effectué. Les parades consistent à afficher le résultat, à utiliser volatile ou d'autres moyens d'empêcher l'optimisation, ou à vérifier le code machine généré.

S'entraîner sur ce thème Retour au thème

Autres questions sur Analyse des performances

  1. Pourquoi, lors de la mesure du temps d'exécution d'un programme, répète-t-on souvent la mesure en écartant les premiers résultats ?
  2. Quelle association entre le problème posé par une mesure unique d'un traitement très court et sa solution est correcte ?
  3. Quelle est la différence correcte entre « temps réel écoulé » (wall-clock time) et « temps CPU » ?
  4. Quelle description du débit (throughput) et de la latence, indicateurs de performance d'un serveur, est correcte ?
  5. Pourquoi, pour évaluer le temps de réponse d'un service Web, examine-t-on souvent le 99e percentile (seuil des 1 % les plus lents) et pas seulement la moyenne ?