Angka floating point presisi tunggal mengambil setengah memori dan pada mesin modern (bahkan pada GPU tampaknya) operasi dapat dilakukan dengan mereka pada kecepatan hampir dua kali lipat dibandingkan dengan presisi ganda. Banyak kode FDTD yang saya temukan secara eksklusif menggunakan aritmatika dan penyimpanan presisi tunggal. Apakah ada aturan praktis tentang kapan dapat diterima untuk menggunakan presisi tunggal untuk memecahkan sistem persamaan skala kecil? Saya menganggap itu harus sangat bergantung pada nomor kondisi matriks.
Selain itu, apakah ada teknik yang efektif yang menggunakan presisi ganda jika diperlukan dan tunggal di mana akurasi ganda tidak diperlukan. Sebagai contoh, saya akan berpikir bahwa untuk perkalian vektor matriks atau produk dot vektor, mungkin ide yang baik untuk mengakumulasi hasil dalam variabel presisi ganda (untuk menghindari kesalahan pembatalan), tetapi entri individual dikalikan satu sama lain dapat dikalikan menggunakan presisi tunggal.
Apakah FPU modern memungkinkan konversi dari presisi tunggal (float) ke presisi ganda (ganda) dan sebaliknya? Atau apakah ini operasi yang mahal?
sumber
Makalah yang bagus tentang topik ini adalah Mempercepat perhitungan ilmiah dengan algoritma presisi campuran .
sumber
Saran saya akan fokus terutama pada konsumsi memori untuk keputusan kapan harus menggunakan presisi tunggal (float). Jadi data curah untuk perhitungan FDTD harus menggunakan float, tapi saya akan menjaga deskripsi masalah itu sendiri (seperti geometri, parameter material, kondisi eksitasi) dan semua data meta terkait dalam double.
Saya akan menjaga semua kinerja tidak kritis dan tidak dianalisis secara mendalam dalam perhitungan ganda. Khususnya, saya akan menyimpan data poligon dan deskripsi geometri lainnya dalam bentuk dobel (mungkin bahkan bilangan bulat jika mungkin), karena pengalaman mengatakan bahwa Anda tidak akan pernah mendapatkan bagian geometris komputasi dari kode Anda sepenuhnya kuat, bahkan jika itu mungkin secara teori.
Bagian ketiga yang akan saya pertahankan adalah perhitungan analitik, termasuk pintasan menggunakan dekomposisi nilai eigen non-simetris. Sebagai contoh, saya memiliki fungsi 2D simetris rotasi piecewise yang ditentukan, dan saya perlu transformasi Fourier-nya. Akan ada berbagai cara numerik yang melibatkan FFT dan "filter low pass analitik" yang tepat untuk mendapatkannya "secara efisien". Karena kinerjanya tidak kritis, saya menggunakan ekspresi analitik "tepat" yang melibatkan fungsi Bessel. Karena ini adalah jalan pintas untuk memulai, dan saya tidak akan menghabiskan waktu menganalisis perbanyakan kesalahan rumus rumit saya, saya lebih baik menggunakan presisi ganda untuk perhitungan itu. (Masih ternyata hanya beberapa ekspresi ekuivalen analitik untuk rumus yang dapat digunakan,
sumber