2010-01-18 22 views
11

Mentre, per quanto mi ricordo, IEEE 754 non dice nulla su una modalità flush-to-zero per gestire denormalized numbers più veloce, alcune architetture offrono questa modalità (ad esempio http://docs.sun.com/source/806-3568/ncg_lib.html).comportamento da zero a virgola mobile nell'aritmetica mobile

Nel caso specifico di questa documentazione tecnica, la gestione standard dei numeri denormalizzati è l'impostazione predefinita e il flush-to-zero deve essere attivato in modo esplicito. Nella modalità predefinita, i numeri denormalizzati vengono gestiti anche nel software, che è più lento.

Lavoro su un analizzatore statico per C incorporato che tenta di prevedere intervalli corretti (se talvolta imprecisi) per i valori che possono verificarsi in fase di esecuzione. Mira ad essere corretto perché è concepito per essere utilizzabile per escludere la possibilità che qualcosa vada storto durante l'esecuzione (ad esempio per codice incorporato critico). Ciò richiede di aver acquisito tutti i possibili comportamenti durante l'analisi e quindi tutti i possibili valori prodotti durante i calcoli in virgola mobile.

In questo contesto, la mia domanda è duplice: c'è

  1. tra le architetture embedded, sono architetture che offrono solo filo a zero? Forse non avrebbero il diritto di farsi pubblicità come "IEEE 754", ma potrebbero offrire operazioni in virgola mobile in stile IEEE 754 abbastanza vicine.

  2. Per le architetture che offrono sia, in un contesto incorporato, non è filo a zero probabilità di essere attivato dal sistema, al fine di rendere il tempo di reazione più prevedibile (un vincolo comune per questi sistemi integrati)?

Handling filo-to-zero nel aritmetica intervallo che uso per i valori in virgola mobile è abbastanza semplice se so che devo farlo, la mia domanda è più se devo farlo.

+0

Buona domanda, ben dichiarata. Non sono esperto di sistemi embedded, ma sospetto che non ci sia una risposta chiara. Dipenderà esclusivamente dal tuo particolare ambiente dell'utente finale. – GManNickG

risposta

7

Sì a entrambe le domande. Ci sono piattaforme che supportano solo il flush-to-zero e ci sono molte piattaforme in cui il flush-to-zero è l'impostazione predefinita.

Si dovrebbe anche essere consapevoli del fatto che molte piattaforme embedded e dsp utilizzano una modalità "Denormali sono zero", che è un'altra ruga nella semantica in virgola mobile.


Modifica ulteriori spiegazioni FTZ vs DAZ:

In FTZ, quando un'operazione produrrebbe un risultato denormal sotto il solito aritmetica, viene restituito invece uno zero. Si noti che alcune implementazioni scorrono sempre allo zero positivo, mentre altre possono sciacquare allo zero positivo o negativo. Probabilmente è meglio non dipendere da nessuno dei due comportamenti.

In DAZ, quando un input per un'operazione è un denormale, uno zero viene sostituito al suo posto. Ancora una volta, non esiste una garanzia generale su quale zero verrà sostituito.

Alcune implementazioni che supportano queste modalità consentono di impostarle in modo indipendente (e alcune supportano solo una delle due), quindi potrebbe essere necessario essere in grado di modellare entrambe le modalità indipendentemente e contemporaneamente.

Si noti inoltre che alcune implementazioni combinano queste due modalità in "Flush to Zero". La modalità "flush to zero" di ARM VFP è ad esempio FTZ e DAZ.

+0

Oggi ho implementato l'aritmetica dell'intervallo che comprende tutte le possibilità di FTZ, DAZ (flushing a +0 o stesso segno zero) e subnormali IEEE 754. Nessuno dei nostri test di regressione ha mostrato alcuna differenza rispetto alla precedente aritmetica IEEE 754. Quindi probabilmente non sarà necessario disturbare gli utenti con un'opzione per questo, la nuova modalità dovrebbe rendere tutti felici. Questa è una cosa molto buona. Grazie ancora! –

+0

Fantastico, felice di aiutare. –

+0

Quale sarebbe la praticità di eseguire la matematica in virgola mobile in modo che i bit di mantissa che rappresentavano valori più piccoli del più piccolo valore normalizzato venissero arrotondati? Penserei che potrebbe essere più economico rispetto ai valori denormalizzati, poiché tutti i numeri in virgola mobile avrebbero la stessa rappresentazione. Solo la fase di "pulizia finale" dovrebbe cambiare. – supercat

2

I nuclei ARM Cortex hanno un'opzione da zero a zero, difficile vedere come è possibile ignorarlo. Poi di nuovo, non prendere consigli di business da un forum. Parla con i tuoi clienti.

+0

Gli utenti esistenti sono fantastici, usano le piattaforme sane, capiscono i problemi in virgola mobile e passano alla lunghezza della disattivazione della generazione silenziosa di 'fmadd' dal loro compilatore per rendere più prevedibili gli errori di arrotondamento. Sono i potenziali utenti a cui sono interessato. Grazie per il tuo feedback. –

Problemi correlati