1.2.3 : Compromis latence/débit
On rencontre régulièrement lors du processus d'optimisation un compromis entre retourner un résultat donné aussi vite que possible (faible latence), et traiter le plus grand volume de données possible sur un temps relativement long (haut débit). Là encore, nos priorités seront guidées par le scénario d'utilisation envisagé:
- La latence est généralement le critère de performance le plus important pour les programmes qui sont utilisés de façon interactive, puisque les humains n'aiment pas attendre et sont très sensibles au délai de restitution de l'information (fût-ce un micro-délai comme celui de l'affichage d'une image à l'écran durant une animation). Dès qu'on interagit directement avec le monde physique, par exemple dans les traitements temps-réel de données expérimentales (le "online"), il est aussi courant de rencontrer des limites au délai possible de traitement d'une information entrante ou d'émission d'une information sortante.
- Le débit de données qu'on peut traiter sur un temps long est généralement le critère le plus important quand on fait face à des volumes de données très grands. En physique, c'est généralement le bon critère pour les traitements différés dits "offline".
En fonction de ce qu'on choisit de privilégier, on aura recourt à des approches d'optimisation différentes. Par exemple, lors de l'exploration d'un espace de paramètres, on s'autorisera à tester plusieurs jeux de paramètres en parallèle pour trouver le "meilleur" si la latence est le paramètre important, alors que cette approche peut être inefficace lorsqu'on a un grand nombre de recherches de ce type à effectuer et n'est pas pressé par le temps pour donner la réponse à la question.
Du point de vue qui nous intéresse ici de l'analyse des performances, une grosse différence entre les applications principalement préoccupées par le débit de données traitées par seconde et celles principalement préoccupées par la latence de traitement d'une information individuelle est que...
- Pour optimiser le débit de données traitées par unité de temps, il suffit de mesurer et optimiser la performance moyenne de l'application sur une exécution longue.
- Pour optimiser la latence de traitement il faut se préoccuper d'autres indicateurs statistiques tels que le temps maximal de traitement, et ce dès la mise en service de l'application où le comportement est souvent différent du fait du phénomène de chauffe des caches. On devra donc utiliser des méthodologies de mesure plus sophistiquées qui peuvent exposer fidèlement des statistiques "à grain fin" de l'exécution de l'application.