7 / 24 · Concept
Largeur d’accumulateur, arrondi et saturation
Dix-huit bits signés suffisent-ils pour neuf produits int8 signés avec un biais nul ?
Les leçons sont gratuites. Inscrivez-vous pour enregistrer vos progrès.
L’accumulation nécessite sa propre largeur
Des opérandes et une sortie sur huit bits n’impliquent pas un accumulateur sur huit bits. Les codes signés sur huit bits ont une valeur absolue maximale de 128. Avec des points zéro nuls et L termes, une borne prudente de la valeur absolue de la somme est L×128×128, plus la valeur absolue du biais. Choisissez une largeur signée dont le maximum positif couvre cette borne ; le bit de signe utilise un bit.
Calcul détaillé de largeur
Pour C=3 et un noyau 3×3, L=27. Lorsque les deux opérandes valent −128, chaque produit vaut +16384 et la somme 442368. Dix-neuf bits signés n’atteignent que 262143. Vingt bits atteignent 524287 et couvrent aussi une marge de valeur absolue du biais de 1000, donnant la borne 443368. Des plages d’opérandes plus petites prouvées peuvent réduire la largeur nécessaire, mais quelques entrées de test ordinaires ne prouvent pas une borne.
Des codes non signés de point zéro nul peuvent atteindre 255 : l’hypothèse 128 est donc invalide. Calculez d’abord A=max(abs(qmin−zx), abs(qmax−zx)) et l’équivalent B pour les poids. Utilisez L×A×B+abs(b). Le centrage peut lui-même exiger plus de bits que le code stocké.
Fixer l’ordre de conversion de sortie
Le multiplicateur est sx×sw/sy. Avec un multiplicateur 0.5 et un point zéro de sortie 128, l’accumulateur neuf devient 4.5, s’arrondit à l’entier pair quatre et produit 132. L’accumulateur onze arrondit 5.5 à six et produit 134. L’accumulateur −3 arrondit −1.5 à −2. La troncature, la troncature vers zéro et le décalage arithmétique à droite diffèrent pour les valeurs négatives. Les exercices utilisent une routine spécifique d’arrondi au plus proche avec égalités vers le pair plutôt que l’arrondi par défaut du langage.
Pour une sortie int8, la valeur convertie 300 sature à 127 et −300 à −128. Supprimer les bits de poids fort donnerait par rebouclage des valeurs sans rapport. Consignez les valeurs avant écrêtage et le nombre de saturations. Incluez dans le contrat l’emplacement de ReLU et sa représentation du zéro.
Vérifiez les grandes sommes positives et négatives, les égalités exactes, les deux limites de saturation et les grands biais. Comparez délibérément une référence large à un accumulateur sous-dimensionné pour révéler le débordement. Nos jeux exécutables restent dans la plage entière exacte de JavaScript ; une référence plus grande doit aussi justifier la précision de l’arithmétique de son hôte.
Essayez vous-même
Dix-huit bits signés suffisent-ils pour neuf produits int8 signés avec un biais nul ?
Lire l’explication
La borne positive est 9×16384=147456, supérieure au maximum sur dix-huit bits de 131071. Dix-neuf bits signés atteignent 262143.