Changeons maintenant de modèle et imaginons que, peu importe le chemin que vous preniez pour aller au point B, le temps que cela prendra est significativement le même. Dans ces conditions, peut-être pensez-vous que la randomisation est inutile ? Détrompez-vous !
Afin d’améliorer leur performance, les programmes informatiques utilisent ce que l’on appelle de la « prédiction de chemin ».
Imaginions que Bob veuille partir à la cueillette aux champignons. Il connaît deux lieux : l’un où il y a très souvent des champignons et l’autre où il n’y en a que lorsque le premier lieu n’en a pas.
Bob veut ramasser le plus de champignons possible avant que la nuit tombe. Cependant, à son arrivée à l’intersection des deux chemins, Bob ne sait pas quel chemin mènera aux champignons (il sait cependant que le chemin de droite est celui qui mène le plus souvent aux champignons).
Bob a deux solutions :
- Attendre que son amie Alice lui téléphone pour lui dire où sont les champignons
- Ou, afin de tenter de gagner du temps, prendre l’un des deux chemins espérant qu’il aura choisi le bon
Dans ces conditions, votre programme (Bob) choisira de tenter de gagner du temps prenant l’un des deux chemins. Grâce à sa mémoire, votre programme (et Bob) savent que c’est le chemin de droite qui est le plus souvent le bon. Bob (et votre programme) vont donc « prédire » que, cette fois encore, le chemin de droite sera le bon (mais ils peuvent se tromper). Ils viennent de réaliser une « prédiction de branche ».
À noter que, dans la plupart des programmes, réaliser une prédiction de chemin ne fera pas perdre du temps en cas d’erreur. Cela n’aura juste pas permis d’en gagner.
Vous savez maintenant ce qu’est une « prédiction de chemin ». Expliquons désormais en quoi cela est un problème lors d’un test de performance.
Comme dit plus haut, la prédiction de chemin permet de gagner du temps. Ainsi, si vous effectuez un test de performance en envoyant toujours les mêmes paramètres, votre programme utilisera toujours le même chemin. Et grâce à la prédiction de chemin, il s’exécutera plus rapidement que la normale. Or, vous voulez connaître (entre autres) la vitesse moyenne d’exécution de votre programme et non sa vitesse d’exécution optimale.
En outre, il est fort probable que votre programme utilise des caches. Ainsi, utiliser uniquement des données identiques à chaque appel ne fera qu’augmenter la vitesse d’exécution de votre programme. Sans une bonne randomisation, vous vous retrouverez donc avec des résultats beaucoup plus optimistes que la réalité.
C’est là toute l’importance de la randomisation : éviter d’avoir des résultats biaisés et trop optimistes.