Aritmetica a virgola mobile di precisione superiore in PDE numerico


9

Ho l'impressione, da risorse molto diverse e di colloqui con le ricerche, che vi sia una crescente domanda di calcoli ad alta precisione in equazioni differenziali parziali numeriche. Qui, alta precisione significa più precisione rispetto alla doppia precisione standard a 64 bit.

Mi chiedo lo stato dell'arte di questo argomento. A titolo di paragone, ci sono communità nella PDE numerica che mirano in modo specifico, ad esempio, metodi multicore, parallelizzazione su larga scala o elaborazione GPU. Mi chiedo se esiste una comunità simile o stia crescendo per metodi di alta precisione nella PDE numerica, e sarei particolarmente interessato (e questo è il vero punto della domanda) in articoli introduttivi o di indagine su alta precisione, che forniscono anche un'impressione dell'attuale rilevanza dell'argomento.

Risposte:


16

La discretizzazione dei PDE continui di solito commette molto più errore della precisione finita. Trovo che circa il 90% delle persone che richiedono una maggiore precisione siano stati semplicemente pigri con la formulazione dei problemi e stanno cercando di risolvere un problema usando un ridimensionamento scadente, cattive discretizzazioni o modellazione di continuum difettosa. Il restante 10% potrebbe avere sistemi giustificatamente mal condizionati per i quali una maggiore precisione ha davvero senso. Anche in questi casi, utilizziamo principalmente la precisione quad come strumento di debug (specialmente in combinazione con metodi che utilizzano derivati ​​di Frechet differenziati finiti e per studiare la causa di spazi nulli numerici "spuri") o localmente per un'operazione molto sensibile piuttosto che nel su larga scala per la produzione.

GCC ha fornito __float128dalla versione 4.6, quindi è molto facile da provare. (Le implementazioni precedenti erano generalmente molto più invasive e meno portatili.) PETSc supporta --with-precision=__float128dalla versione 3.2, quindi è solo una questione di ricompilazione.


Giusto. E Fortran ha reale (dp) dove si può impostare dp = 16 (per gfortran) per ottenere una precisione quad, quindi è anche molto facile da provare.
Ondřej Čertík,

9

Nei 15 anni in cui abbiamo fornito il software FEM sotto forma del progetto deal.II (http://www.dealii.org/), non credo che abbiamo mai avuto una vera richiesta per risolvere PDE per maggiore precisione rispetto alla doppia precisione. Il motivo è come suggerisce Jed nell'altra risposta: l'errore che si fa discretizzando il PDE è molto più grande delle 16 cifre di precisione che si ottiene dall'aritmetica a virgola mobile a doppia precisione. Quindi, dovresti avere una mesh incredibilmente sottile per arrivare al punto in cui hai bisogno di una maggiore precisione nell'aritmetica per influenzare l'errore generale.

Penso che in realtà sia vero il contrario: le persone stanno pensando (e stanno lavorando) a cosa succede quando, ad esempio, usi la precisione singola per memorizzare gli elementi della matrice o dei precondizionatori. In generale, ciò non riduce in modo significativo la loro precisione, ma aumenta le prestazioni di circa un fattore due perché è necessario contenere solo la metà della quantità di dati dalla memoria al processore.

Quindi, il mio senso è che la precisione quadrupla (o anche superiore) è qualcosa che può essere rilevante per la comunità del risolutore ODE ma non per la comunità PDE.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.