Aritmatika floating-point presisi lebih tinggi dalam PDE numerik

9

Saya mendapat kesan, dari sumber daya yang sangat berbeda dan pembicaraan dengan para peneliti, bahwa ada peningkatan permintaan untuk perhitungan presisi tinggi dalam persamaan diferensial parsial numerik. Di sini, presisi tinggi berarti lebih presisi daripada hanya presisi ganda 64bit standar.

Saya bertanya-tanya tentang seni topik ini. Sebagai perbandingan, ada komunitas dalam PDE numerik yang secara khusus menargetkan, misalnya metode multicore, paralelisasi skala besar atau komputasi GPU. Saya bertanya-tanya apakah komunitas serupa ada atau sedang berkembang untuk metode presisi tinggi dalam PDE numerik, dan saya akan sangat tertarik (dan ini adalah pertanyaan sebenarnya) dalam makalah pengantar atau survei pada presisi tinggi, yang juga memberikan kesan dari relevansi aktual dari topik tersebut.

shuhalo
sumber

Jawaban:

16

Diskritisasi kontinum PDE biasanya melakukan lebih banyak kesalahan daripada presisi yang terbatas. Saya menemukan bahwa sekitar 90% dari orang yang meminta presisi yang lebih tinggi hanya malas dengan perumusan masalah dan mencoba untuk memecahkan masalah menggunakan penskalaan yang buruk, diskritisasi yang buruk, atau pemodelan kontinum yang buruk. Sisanya 10% mungkin memiliki sistem yang dikondisikan dengan buruk yang meningkatkan presisi sangat masuk akal. Bahkan dalam kasus tersebut, kami sebagian besar menggunakan presisi quad sebagai alat debugging (terutama dalam hubungannya dengan metode menggunakan turunan Frechet yang berbeda hingga, dan untuk menyelidiki penyebab ruang nol numerik "palsu") atau secara lokal untuk operasi yang sangat sensitif daripada di skala besar untuk produksi.

GCC telah menyediakan __float128sejak versi 4.6, jadi sangat mudah untuk dicoba. (Implementasi sebelumnya pada umumnya jauh lebih mengganggu dan kurang portabel.) PETSc telah mendukung --with-precision=__float128sejak versi 3.2 jadi itu hanya masalah kompilasi ulang.

Jed Brown
sumber
Baik. Dan Fortran memiliki real (dp) di mana seseorang dapat mengatur dp = 16 (untuk gfortran) untuk mendapatkan presisi quad, jadi itu juga sangat mudah untuk dicoba.
Ondřej Čertík
9

Dalam 15 tahun kami telah menyediakan perangkat lunak FEM dalam bentuk kesepakatan. akurasi lebih tinggi daripada presisi ganda. Alasannya adalah seperti yang Jed sarankan dalam jawaban lain: Kesalahan yang satu membuat diskritisasi PDE jauh lebih besar dari 16 digit akurasi yang didapat dari aritmatika floating point presisi ganda. Dengan demikian, Anda harus memiliki jaring yang sangat halus untuk sampai ke titik di mana Anda membutuhkan lebih banyak akurasi dalam aritmatika untuk memengaruhi kesalahan keseluruhan.

Saya pikir sebenarnya yang terjadi adalah kebalikannya: Orang-orang berpikir tentang (dan mengerjakan) apa yang terjadi ketika Anda, misalnya, menggunakan presisi tunggal untuk menyimpan elemen-elemen dari matriks atau prekondisi. Secara umum, ini tidak secara signifikan mengurangi keakuratannya, tetapi meningkatkan kinerja kira-kira satu faktor dari dua karena Anda perlu hanya setengah dari data dari memori ke dalam prosesor.

Jadi, menurut saya presisi quad (atau bahkan lebih tinggi) adalah sesuatu yang mungkin relevan dengan komunitas pemecah ODE tetapi tidak untuk komunitas PDE.

Wolfgang Bangerth
sumber