Wyższa precyzja arytmetyki zmiennoprzecinkowej w liczbowym PDE

9

Mam wrażenie, z bardzo różnych zasobów i rozmów z badaczami, że rośnie zapotrzebowanie na obliczenia o wysokiej precyzji w numerycznych równaniach różniczkowych cząstkowych. Tutaj wysoka precyzja oznacza większą precyzję niż tylko standardowa podwójna precyzja 64-bitowa.

Zastanawiam się nad aktualnym stanem wiedzy na ten temat. Dla porównania istnieją liczbowe PDE, które konkretnie dotyczą np. Metod wielordzeniowych, paralelizacji na dużą skalę lub obliczeń na GPU. Zastanawiam się, czy istnieje podobna społeczność, czy też rozwija się ona dla metod o wysokiej precyzji w liczbowym PDE, i byłbym szczególnie zainteresowany (i taki jest właśnie punkt pytania) we wstępnych lub ankietowych pracach na temat wysokiej precyzji, które również dają wrażenie rzeczywistego znaczenia tematu.

shuhalo
źródło

Odpowiedzi:

16

Dyskretyzacja kontinuum PDE zwykle powoduje znacznie większy błąd niż precyzja skończona. Uważam, że około 90% osób żądających większej precyzji właśnie leniwie formułuje problemy i próbuje rozwiązać problem przy użyciu złego skalowania, złej dyskretyzacji lub złego modelowania kontinuum. Pozostałe 10% może mieć słusznie źle uwarunkowane systemy, dla których zwiększona precyzja naprawdę ma sens. Nawet w tych przypadkach używamy głównie poczwórnej precyzji jako narzędzia do debugowania (szczególnie w połączeniu z metodami wykorzystującymi skończone zróżnicowane pochodne Frecheta i do badania przyczyny „fałszywych” liczbowych spacji zerowych) lub lokalnie w celu bardzo wrażliwej operacji, a nie w duża skala do produkcji.

GCC zapewnia __float128od wersji 4.6, więc bardzo łatwo wypróbować. (Wcześniejsze implementacje były na ogół bardziej uciążliwe i mniej przenośne.) PETSc obsługuje --with-precision=__float128od wersji 3.2, więc jest to tylko kwestia ponownej kompilacji.

Jed Brown
źródło
Dobrze. Fortran ma także rzeczywistą (dp), w której można ustawić dp = 16 (dla gfortran), aby uzyskać czterokrotnie większą precyzję, więc bardzo łatwo jest spróbować.
Ondřej Čertík
9

W ciągu 15 lat, kiedy dostarczyliśmy oprogramowanie MES w formie projektu deal.II (http://www.dealii.org/), nie sądzę, aby kiedykolwiek mieliśmy prawdziwą prośbę o rozwiązanie PDE do wyższa dokładność niż podwójna precyzja. Powód jest taki, jak sugeruje Jed w drugiej odpowiedzi: błąd, który sprawia, że ​​dyskretyzacja PDE jest znacznie większa niż 16 cyfr dokładności, jaką uzyskuje się z arytmetyki zmiennoprzecinkowej podwójnej precyzji. Dlatego musiałbyś mieć niewiarygodnie drobną siatkę, aby dostać się do punktu, w którym potrzebujesz większej dokładności arytmetycznej, aby wpłynąć na ogólny błąd.

Myślę, że w rzeczywistości jest odwrotnie: ludzie myślą (i pracują) nad tym, co się dzieje, gdy na przykład używasz pojedynczej precyzji do przechowywania elementów macierzy lub warunków wstępnych. Zasadniczo nie zmniejsza to znacząco ich dokładności, ale zwiększa wydajność o około dwa razy, ponieważ do procesora potrzeba tylko połowy ilości danych z pamięci.

Wydaje mi się więc, że quad precyzja (lub nawet wyższa) może być istotna dla społeczności solverów ODE, ale nie dla społeczności PDE.

Wolfgang Bangerth
źródło