Вища точність арифметики з плаваючою комою в числовому PDE


9

У мене складається враження, що з дуже різних ресурсів та переговорів з дослідженнями зростає попит на високоточні обчислення в числових часткових диференціальних рівняннях. Тут висока точність означає більшу точність, ніж просто стандартна 64-бітна подвійна точність.

Цікаво про сучасність цієї теми. Для порівняння, в числовому PDE є комуніти, які конкретно націлені, наприклад, багатоядерні методи, масштабна паралелізація або обчислення GPU. Цікаво, чи існує подібне співтовариство чи зростає для методів високої точності чисельний PDE, і я був би зацікавлений у конкретних питаннях (і це фактична суть питання) у вступних або оглядових роботах з високою точністю, які також створюють враження фактичної актуальності теми.

Відповіді:


16

Дискретизація PDE безперервної дії зазвичай робить набагато більше помилок, ніж кінцева точність. Я вважаю, що близько 90% людей, які вимагають більш високої точності, просто лінувались у формулюванні проблеми і намагаються вирішити проблему за допомогою поганого масштабування, поганої дискретизації або поганого моделювання континууму. У решті 10% можуть бути виправдано погані кондиціоновані системи, для яких підвищена точність дійсно має сенс. Навіть у тих випадках ми здебільшого використовуємо квадратичну точність як інструмент налагодження (особливо в поєднанні з методами, що використовують кінцеві різнисті похідні Frechet, і досліджувати причину "помилкових" чисельних нульових пробілів) або локально для дуже чутливої ​​операції, а не для операції великі масштаби для виробництва.

GCC надає __float128з версії 4.6, тому це дуже легко спробувати. (Раніші реалізації були, як правило, набагато більш нав'язливими та менш портативними.) PETSc підтримує --with-precision=__float128з версії 3.2, тому це лише питання перекомпіляції.


Правильно. І у Fortran є справжній (dp), де можна встановити dp = 16 (для gfortran), щоб отримати квадратичну точність, тому це також дуже легко спробувати.
Ondřej Čertík

9

За 15 років, коли ми надавали програмне забезпечення FEM у формі проекту deal.II (http://www.dealii.org/), я не думаю, що у нас коли-небудь було справжнього запиту вирішити PDE для вища точність, ніж подвійна точність. Причина полягає в тому, що Джед пропонує в іншій відповіді: Помилка, яка робить дискретизацію PDE, значно більша, ніж 16 цифр точності, яку отримує арифметика з плаваючою точкою подвійної точності. Таким чином, вам доведеться мати неймовірно тонку сітку, щоб дістатися до тієї точки, коли вам потрібно більше точності в арифметиці, щоб вплинути на загальну помилку.

Я думаю, що насправді все навпаки: люди думають про (і працюють над) тим, що станеться, коли ви, наприклад, використовуєте єдину точність для зберігання елементів матриці або попередніх кондиціонерів. Взагалі, це не суттєво знижує їх точність, але збільшує продуктивність приблизно в два рази, тому що потрібно мати лише наполовину менше даних з пам'яті в процесор.

Отже, я відчуваю, що квадратична точність (або навіть вища) - це те, що може стосуватися спільноти вирішувачів ODE, але не для спільноти PDE.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.