Supposons que l'on me donne un tableau de entiers de largeur fixe (c'est-à-dire qu'ils tiennent dans un registre de largeur ), . Je veux calculer la somme sur une machine avec l'arithmétique du complément à 2, qui effectue des ajouts modulo avec une sémantique enveloppante. C'est facile - mais la somme peut dépasser la taille du registre, et si c'est le cas, le résultat sera erroné.
Si la somme ne déborde pas, je veux la calculer, et vérifier qu'il n'y a pas de débordement, le plus vite possible. Si la somme déborde, je veux seulement savoir que c'est le cas, je me fiche de toute valeur.
L'ajout naïf de nombres dans l'ordre ne fonctionne pas, car une somme partielle peut déborder. Par exemple, avec des registres 8 bits, est valide et a une somme de , même si la somme partielle déborde la plage de registres .
Évidemment, je pourrais utiliser un plus grand registre comme accumulateur, mais supposons le cas intéressant où j'utilise déjà la plus grande taille de registre possible.
Il existe une technique bien connue pour ajouter des nombres de signe opposé à la somme partielle actuelle . Cette technique évite les débordements à chaque étape, au prix de ne pas être compatible avec le cache et de ne pas tirer grand avantage de la prédiction de branche et de l'exécution spéculative.
Existe-t-il une technique plus rapide qui profite peut-être de l'autorisation de déborder des sommes partielles, et est plus rapide sur une machine typique avec un indicateur de débordement, un cache, un prédicteur de branche et une exécution et des charges spéculatives?
(Il s'agit d'un suivi de la sommation sûre Overflow )