Aritmética de ponto flutuante de maior precisão no PDE numérico

9

Tenho a impressão, de recursos muito diferentes e conversas com pesquisas, de que há uma demanda crescente por cálculos de alta precisão em equações diferenciais parciais numéricas. Aqui, alta precisão significa mais precisão do que apenas a precisão dupla de 64 bits padrão.

Eu me pergunto sobre o estado da arte deste tópico. A título de comparação, existem comunidades no PDE numérico que visam especificamente, por exemplo, métodos multicore, paralelização em larga escala ou computação em GPU. Gostaria de saber se existe uma comunidade semelhante ou está crescendo para métodos de alta precisão no PDE numérico, e eu estaria particularmente interessado (e esse é o ponto real da questão) em artigos introdutórios ou de pesquisa sobre alta precisão, que também fornecem uma impressão da relevância real do tópico.

shuhalo
fonte

Respostas:

16

A discretização dos PDEs contínuos geralmente comete muito mais erros do que a precisão finita. Acho que cerca de 90% das pessoas que solicitam maior precisão acabam sendo preguiçosas na formulação de problemas e estão tentando resolver um problema usando redimensionamento ruim, discretizações ruins ou modelagem de continuum ruim. Os 10% restantes podem ter sistemas mal condicionados de maneira justificável para os quais o aumento da precisão realmente faz sentido. Mesmo nesses casos, usamos principalmente a precisão quádrupla como uma ferramenta de depuração (especialmente em conjunto com métodos que utilizam derivativos Frechet diferenciados finitos e para investigar a causa de espaços nulos numéricos "espúrios") ou localmente para uma operação muito sensível, e não no grande escala para produção.

O GCC fornece __float128desde a versão 4.6, por isso é muito fácil tentar. (As implementações anteriores eram geralmente muito mais invasivas e menos portáteis.) O PETSc oferece suporte --with-precision=__float128desde a versão 3.2, portanto é apenas uma questão de recompilar.

Jed Brown
fonte
Direita. E o Fortran possui real (dp), em que é possível definir dp = 16 (para gfortran) para obter precisão quad, por isso também é muito fácil de tentar.
Ondřej Čertík
9

Nos 15 anos em que fornecemos o software FEM na forma do projeto deal.II (http://www.dealii.org/), acho que nunca tivemos uma solicitação genuína para resolver PDEs para maior precisão do que precisão dupla. O motivo é como Jed sugere na outra resposta: O erro cometido ao discretizar o PDE é muito maior que os 16 dígitos de precisão obtidos pela aritmética de ponto flutuante de precisão dupla. Assim, você teria que ter uma malha incrivelmente fina para chegar ao ponto em que precisa de mais precisão na aritmética para afetar o erro geral.

Penso que realmente o oposto é verdadeiro: as pessoas estão pensando (e trabalhando) no que acontece quando, por exemplo, você usa precisão única para armazenar os elementos da matriz ou dos pré-condicionadores. Em geral, isso não reduz significativamente sua precisão, mas aumenta o desempenho em aproximadamente um fator de dois, porque você precisa ter apenas a metade dos dados da memória no processador.

Portanto, meu senso é que a precisão quad (ou até mais alta) é algo que pode ser relevante para a comunidade de solucionadores de ODE, mas não para a comunidade de PDE.

Wolfgang Bangerth
fonte