CPU Architecture e matematica a virgola mobile

5

Sto cercando di comprendere alcuni dettagli su come viene eseguita la matematica in virgola mobile sulla CPU, cercando di capire meglio quali tipi di dati utilizzare ecc.

Penso di avere una buona conoscenza di come viene eseguita la matematica intera. Se ho capito bene e ignorato SIMD, una CPU a 32 bit generalmente eseguirà calcoli matematici con una precisione di almeno 32 bit, ecc.

È corretto che la matematica in virgola mobile dipenda dalla presenza di una FPU? E che la FPU su x86 è 80-bit, quindi la matematica in virgola mobile viene eseguita con questa precisione a meno che non si usi SIMD? Che mi dici di ARM?

    
posta Jo-Herman Haugholt 21.11.2011 - 14:07
fonte

3 risposte

5

Molte volte operazioni come la virgola mobile e la gestione della memoria sono codificate in modo da poter essere "intrappolate". Ciò significa che il sistema può essere configurato per utilizzare l'hardware o diramare automaticamente un'implementazione software. Nel caso del software, l'implementazione può essere qualsiasi cosa, anche se la maggior parte dei produttori fornisce librerie che seguono standard accettati (IEEE-754 nel caso di floating point). In molti sistemi, quando si installa un'unità a virgola mobile o altro chip, l'esecuzione dell'istruzione viene automaticamente rimandata al nuovo chip, quindi non è necessaria alcuna riconfigurazione software.

A quanto ho capito, l'architettura ARM fa qualcosa di molto simile a x86, con istruzioni a virgola mobile quella trappola all'emulazione del software se non si trova l'hardware FPU.

    
risposta data 21.11.2011 - 14:41
fonte
1

Se comprendi i tipi di dati C, può supportare i seguenti formati:

Il numero di bit è distribuito come: {Segno + Esponente + Significativo}

float -che è distribuito a 32 bit come 1 + 8 + 23.
dbouble -che è distribuito a 64 bit come 1 + 11 + 52.
Doppio esteso - che è 80 bit dist. come 1 + 15 + 64.

Quindi il doppio esteso con 80 bit di precisione è il float di lunghezza maggiore che può essere supportato nativamente da C in x86. Ricorda che se la tua variabile è float (32 bit) ha ancora una precisione equivalente a 32 bit non come 80 bit nella memoria finale. Tuttavia, nella maggior parte delle CPU, le ALU e le FPU sono in genere più grandi della lunghezza della parola nativa, in modo che i risultati intermedi non siano eccessivi.

Per supportare qualsiasi precisione migliore di quella sopra, è necessario un supporto software aggiuntivo. È possibile creare aritmetica di tale precisione più elevata (ad esempio routine crittografiche che generano aritmetiche che sono qualsiasi cosa da 128 a 1024 bit, ma questo supporto aggiuntivo è generato dal software.)

    
risposta data 21.11.2011 - 15:06
fonte
-1

Non hai bisogno di hardware in virgola mobile per utilizzare la matematica in virgola mobile.

IEEE-754 ha un numero di lunghezze in virgola mobile 80, 64, 32 e ora un 16. Esistono altri formati in virgola mobile non-ieee. Il formato / standard IEEE è molto doloroso, quasi tutte le funzionalità sono sprecate, poche le conoscono e poche o nessuna delle lingue ti dà la possibilità di usarle. Con l'hardware conforme non si riesce ancora a soddisfare le specifiche perché il software / sistema operativo ne fa parte. È necessario fornire risposte diverse a seconda che le eccezioni siano intrappolate, ad esempio. Troverai i formati in virgola mobile non IEEE in DSP per velocità, dimensioni del processore, ecc. Sono stati più strettamente sintonizzati su ciò che hai realmente utilizzato per la fpu e non su tutto ciò che avremmo mai potuto desiderare e l'approccio di kitchen sink utilizzato dallo standard IEEE.

Non tutte le fpu hardware supportano ogni lunghezza.

I bug di fpu vengono spesso risolti non usando l'hardware per l'istruzione rotta, o l'istruzione rotta è racchiusa da un software per risolvere eventuali problemi. L'hardware potrebbe essere migliorato negli ultimi 5-10 anni, ma è stato difficile trovare una fpu hardware senza problemi. Per evitare l'imbarazzo del pentium tutto da capo avresti bisogno o almeno vuoi correggere i bug nel software. la difficoltà delle specifiche IEEE è il motivo per cui è raro trovare un sistema che soddisfi completamente le specifiche. correggere il bug nel software entra nei compilatori e nei sistemi operativi, a meno che tu non controlli tutti e tre (hardware, compilatore, sistema operativo), anche tu potresti fallire.

Normalmente si compila il programma sapendo cosa ci si aspetta di eseguire, almeno con ARM compilato per hard float o soft float. È certamente possibile rilevare la libreria in virgola mobile e quindi utilizzare la soluzione appropriata da lì in poi in modo che un binario possa funzionare su entrambi. Devi esaminare separatamente ciascun compilatore per sapere quali sono le soluzioni / regole. I compilatori tendono a sapere quali piattaforme normalmente non lo supportano e non creano build per il soft float di default e altre piattaforme che normalmente o sempre hanno una fpu e, normalmente, costruiscono per una fpu hardware, per esempio.

Stai cercando di decidere quando usarlo? Come regola generale, evitalo a meno che tu non ne abbia davvero, davvero bisogno. Quando lo usi ci sono molti modi per usarlo male, capire come usarlo senza sprecarlo o senza ottenere la risposta sbagliata. Potresti stare meglio con la matematica intera o tenere traccia del decimale da solo.

    
risposta data 14.01.2012 - 06:53
fonte

Leggi altre domande sui tag