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();
- ALe CPU dispose d'une instruction spéciale qui termine le calcul instantanément
- BLa valeur de x n'étant pas utilisée ensuite, le compilateur a supprimé le calcul de la boucle comme inutile
- 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é.