Gleitkomma-Arithmetik mit höherer Genauigkeit in numerischer PDE

9

Ich habe aus sehr unterschiedlichen Quellen und Gesprächen mit Forschern den Eindruck, dass eine wachsende Nachfrage nach hochpräzisen Berechnungen in numerischen partiellen Differentialgleichungen besteht. Hohe Präzision bedeutet hier mehr Präzision als nur die standardmäßige 64-Bit-Doppelpräzision.

Ich frage mich über den Stand der Technik zu diesem Thema. Zum Vergleich gibt es in der numerischen PDE Kommunitites, die speziell auf Multicore-Methoden, Parallelisierung in großem Maßstab oder GPU-Computing abzielen. Ich frage mich, ob es eine ähnliche Community für hochpräzise Methoden in der numerischen PDE gibt oder wächst, und ich wäre besonders an Einführungs- oder Umfragepapieren zu hochpräzisen Methoden interessiert (und dies ist der eigentliche Punkt der Frage), die ebenfalls einen Eindruck vermitteln der tatsächlichen Relevanz des Themas.

Shuhalo
quelle

Antworten:

16

Die Diskretisierung der Kontinuums-PDEs begeht normalerweise viel mehr Fehler als die endliche Genauigkeit. Ich finde, dass ungefähr 90% der Leute, die eine höhere Präzision fordern, nur faul mit der Problemformulierung waren und versuchen, ein Problem durch schlechte Skalierung, schlechte Diskretisierungen oder schlechte Kontinuumsmodellierung zu lösen. Die restlichen 10% haben möglicherweise zu Recht schlecht konditionierte Systeme, für die eine höhere Präzision wirklich Sinn macht. Selbst in diesen Fällen verwenden wir meistens Quad-Präzision als Debugging-Tool (insbesondere in Verbindung mit Methoden, die endlich differenzierte Frechet-Derivate verwenden und die Ursache von "unechten" numerischen Nullräumen untersuchen) oder lokal für eine sehr empfindliche Operation anstatt in der Großproduktion.

GCC hat __float128seit Version 4.6 bereitgestellt , daher ist es sehr einfach zu versuchen. (Frühere Implementierungen waren im Allgemeinen viel aufdringlicher und weniger portabel.) PETSc wird --with-precision=__float128seit Version 3.2 unterstützt, es handelt sich also nur um eine Neukompilierung.

Jed Brown
quelle
Richtig. Und Fortran hat real (dp), wo man dp = 16 (für gfortran) einstellen kann, um Quad-Präzision zu erhalten, so dass es auch sehr einfach ist, es zu versuchen.
Ondřej Čertík
9

In den 15 Jahren, in denen wir FEM-Software in Form des Deal.II-Projekts (http://www.dealii.org/) bereitgestellt haben, glaube ich nicht, dass wir jemals eine echte Anfrage zur Lösung von PDEs hatten höhere Genauigkeit als doppelte Genauigkeit. Der Grund ist, wie Jed in der anderen Antwort vorschlägt: Der Fehler, den man beim Diskretisieren der PDE macht, ist viel größer als die 16 Stellen Genauigkeit, die man durch Gleitkomma-Arithmetik mit doppelter Genauigkeit erhält. Sie müssten also ein unglaublich feines Netz haben, um an den Punkt zu gelangen, an dem Sie mehr Genauigkeit in der Arithmetik benötigen, um den Gesamtfehler zu beeinflussen.

Ich denke, dass tatsächlich das Gegenteil der Fall ist: Die Leute denken darüber nach (und arbeiten daran), was passiert, wenn Sie beispielsweise die Elemente der Matrix oder der Vorkonditionierer mit einfacher Genauigkeit speichern. Im Allgemeinen verringert dies die Genauigkeit nicht wesentlich, erhöht jedoch die Leistung um etwa den Faktor zwei, da nur halb so viele Daten aus dem Speicher in den Prozessor übertragen werden müssen.

Meiner Meinung nach ist Quad-Präzision (oder sogar höher) etwas, das für die ODE-Solver-Community relevant sein kann, aber nicht für die PDE-Community.

Wolfgang Bangerth
quelle