Высокоточная арифметика с плавающей точкой в ​​числовом PDE


9

У меня сложилось впечатление, из очень разных источников и разговоров с исследователями, что существует растущий спрос на высокоточные вычисления в численных уравнениях в частных производных. Здесь высокая точность означает большую точность, чем стандартная 64-битная двойная точность.

Интересно о состоянии дел в этой теме. Для сравнения, в числовом PDE существуют сообщества, которые специально предназначены, например, для многоядерных методов, крупномасштабного распараллеливания или вычислений на GPU. Интересно, существует ли подобное сообщество или оно растет для высокоточных методов в числовом PDE, и я бы был особенно заинтересован (и это актуальный вопрос) в вводных или обзорных документах по высокой точности, которые также дают впечатление актуальной актуальности темы.

Ответы:


16

Дискретизация континуальных PDE обычно допускает гораздо больше ошибок, чем конечная точность. Я обнаружил, что около 90% людей, требующих более высокой точности, просто ленились с формулировкой проблемы и пытаются решить проблему с помощью плохого масштабирования, плохой дискретизации или плохого моделирования континуума. Оставшиеся 10% могут иметь оправданно плохо обусловленные системы, для которых действительно имеет смысл повышение точности. Даже в этих случаях мы в основном используем квадратичную точность в качестве инструмента отладки (особенно в сочетании с методами, использующими конечно-разностные производные Фреше и для исследования причины «ложных» числовых пустых пространств) или локально для очень чувствительной операции, а не в большой масштаб для производства.

GCC предоставляет __float128начиная с версии 4.6, поэтому очень легко попробовать. (Более ранние реализации были, как правило, гораздо более навязчивыми и менее переносимыми.) PETSc поддерживает --with-precision=__float128начиная с версии 3.2, так что это просто вопрос перекомпиляции.


Правильно. И у Фортрана есть реальная (dp), где можно установить dp = 16 (для gfortran), чтобы получить четкую четкость, так что это также очень легко попробовать.
Ондржей Чертик

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.