L'unica cosa che ho trovato finora sono "trasformazioni senza errori". Per eventuali errori di numeri in virgola mobile da a+b
, a-b
e a*b
sono anche numeri a virgola mobile (in modalità round to nearest, supponendo overflow/underflow ecc. Ecc.).
L'errore di aggiunta (e ovviamente sottrazione) è facile da calcolare; se abs(a) >= abs(b)
, l'errore è esattamente b-((a+b)-a)
(2 flop o 4-5 se non sappiamo quale è più grande). L'errore di moltiplicazione è banale da calcolare con fma
- è semplicemente fma(a,b,-a*b)
. Senza fma
ci sono 16 flop di codice piuttosto antipatico. E l'emulazione completamente generica di arrotondata correttamente fma
è ancora più lenta di quella.
Extra 16 flop di tracciamento degli errori per flop di calcolo reale è un enorme overkill, ma con solo 1-5 flop compatibili con la pipeline è abbastanza ragionevole, e per molti algoritmi basati su quel 50% -200% di overhead del tracking degli errori e la compensazione produce un errore piccolo come se tutti i calcoli fossero fatti in due volte il numero di bit che erano, evitando in molti casi maltrattamenti.
È interessante notare che, fma
non è mai usato in questi algoritmi per calcolare i risultati, solo per trovare gli errori, perché trovare l'errore di fma
è un lento come trovare errori di moltiplicazione è stato senza fma
.
Le parole chiave pertinenti da cercare sarebbero "schema Horner compensato" e "prodotto punto compensato", con lo schema Horner che beneficia molto di più.
domanda riguarda l'impatto di arrotondamento, non si tratta di questo. La tua risposta è anche errata in quanto fma richiede 3 unità in virgola mobile in ingresso invece di 2 ingressi standard, porta aggiuntiva in file di registro in virgola mobile e generatori in virgola mobile più larghi Questo non è gratuito, è un compromesso tra supporto fma al costo di alcuni altro hardware. – taw
taw: hai chiesto quali algoritmi traggono vantaggio da FMA e per alcuni esempi in cui l'arrotondamento è un vantaggio non banale. Ho risposto alla prima parte, il che è il vantaggio della maggior parte degli algoritmi. – Gabe