Altifigence Academy

7 / 24 · Concetto

Larghezza dell'accumulatore, arrotondamento e saturazione

Diciotto bit con segno sono sufficienti per nove prodotti int8 con segno e bias zero?

L'accumulo richiede una propria larghezza

Operandi a otto bit e uscita a otto bit non implicano un accumulatore a otto bit. I codici con segno a otto bit hanno valore assoluto massimo 128. Con punti zero zero e L termini, un limite conservativo del valore assoluto della somma è L×128×128, più il valore assoluto del bias. Scegli una larghezza con segno il cui massimo positivo copra quel limite; il bit di segno occupa un bit.

Calcolo svolto della larghezza

Per C=3 e un kernel 3×3, L=27. Quando entrambi gli operandi sono −128, ogni prodotto è +16384 e la somma è 442368. Diciannove bit con segno arrivano soltanto a 262143. Venti bit arrivano a 524287 e coprono anche una disponibilità di 1000 per il valore assoluto del bias, dando limite 443368. Intervalli degli operandi dimostrati più piccoli possono ridurre la larghezza richiesta, ma pochi ingressi di prova ordinari non possono dimostrare un limite.

I codici senza segno con punto zero zero possono raggiungere 255, quindi l'ipotesi 128 fallisce. Calcola prima A=max(abs(qmin−zx),abs(qmax−zx)) e l'analogo B per i pesi. Usa L×A×B+abs(b). Anche il centramento può richiedere più bit del codice memorizzato.

Fissa l'ordine di conversione dell'uscita

Il moltiplicatore è sx×sw/sy. Con moltiplicatore 0.5 e punto zero di uscita 128, l'accumulatore nove diventa il caso equidistante 4.5, si arrotonda al pari quattro e produce 132. L'accumulatore undici arrotonda 5.5 a sei e produce 134. L'accumulatore −3 arrotonda −1.5 a −2. Troncamento, troncamento verso zero e scorrimento aritmetico a destra differiscono per valori negativi. Gli esercizi usano una routine dedicata di arrotondamento al pari anziché la funzione predefinita del linguaggio.

Per uscita int8, il valore convertito 300 satura a 127 e −300 a −128. Eliminare i bit più alti produrrebbe valori modulari non correlati. Registra i valori prima della limitazione e il numero di saturazioni. Includi nel contratto la posizione di ReLU e la sua rappresentazione dello zero.

Verifica somme grandi positive e negative, equidistanze esatte, entrambi i limiti di saturazione e bias grandi. Confronta intenzionalmente un riferimento esteso con un accumulatore sottodimensionato per rivelare l'overflow. I nostri casi eseguibili rimangono nell'intervallo intero esatto di JavaScript; un riferimento più grande deve anche giustificare la precisione dell'aritmetica dell'ambiente.

Prova tu

Diciotto bit con segno sono sufficienti per nove prodotti int8 con segno e bias zero?

Leggi la spiegazione

Il limite positivo è 9×16384=147456, superiore al massimo a diciotto bit 131071. Diciannove bit con segno arrivano a 262143.

La scelta vale per questo browser. Puoi modificarla in qualsiasi momento dal piè di pagina.