Saya memiliki sistem pemrosesan sinyal digital yang beroperasi pada mesin x86 cepat menggunakan angka floating point presisi ganda . Terpikir oleh saya bahwa saya tidak benar-benar menggunakan rentang dinamis yang besar dari representasi floating point - semua jumlah cocok dengan mudah dalam kisaran ± 32768.
Pertanyaan saya: mungkinkah beralih ke perhitungan titik tetap akan memberikan manfaat dalam akurasi numerik (prioritas tinggi) atau waktu komputasi (prioritas rendah)?
Tentu saja, jawabannya tergantung pada berapa banyak bit yang tersedia untuk perhitungan titik tetap. Berapa banyak bit presisi yang digunakan sistem titik tetap tipikal? Apakah mungkin untuk secara efisien melakukan perhitungan titik tetap, dengan, katakanlah, 64 bit ( bagian bilangan bulat 16 bit, bagian pecahan 48 bit ) pada x86-64?
Saya selalu berpikir bahwa perhitungan titik tetap hanya digunakan dalam situasi di mana daya CPU terbatas - apakah masuk akal untuk menggunakan perhitungan titik tetap ketika daya CPU tidak menjadi masalah?
sumber
Jawaban:
Akurasi numerik bilangan bulat hanya akan lebih baik daripada akurasi numerik float jika resolusi bilangan bulat lebih baik. Doubles memiliki 52 bit fraksional, jadi float presisi ganda memiliki resolusi lebih buruk daripada bilangan bulat di sekitar , yang jauh lebih besar dari 32768 ( 2 15 ). Jadi, tidak, akurasi numerik tidak akan lebih baik jika Anda pergi ke bilangan bulat.252 215
Masalah kedua adalah kecepatan. Jawabannya adalah: itu tergantung pada perangkat kerasnya. Jika Anda menjalankan program Anda pada prosesor sinyal digital yang memiliki banyak titik tetap, kalikan / terakumulasi inti, maka ya, itu akan jauh lebih cepat di titik tetap. Pada chip x86, di sisi lain, itu mungkin sebenarnya akan lebih lambat di titik tetap. Saya melakukan persis apa yang Anda bicarakan sekali dan melihat waktu eksekusi saya meningkat.
Setelah melakukan pencarian di internet saya menemukan bahwa itu adalah hal biasa. Alasannya adalah karena ia memiliki prosesor floating-point khusus yang tidak melakukan apa-apa ketika Anda beralih ke titik tetap, sedangkan perangkat keras titik tetap dibagi dengan tindakan titik tetap biasa, seperti aritmatika pointer.
Jika Anda ingin mempercepat pemrosesan, cara untuk melakukannya adalah mengubah dari pelampung presisi ganda ke pelampung presisi tunggal. Itu akan menghasilkan peningkatan kecepatan yang signifikan. Itu tentu saja akan mengurangi akurasi angka Anda.
sumber
Kelebihan titik tetap sebagian besar dalam hal daya (seperti ketika Anda memiliki pilihan perangkat keras prosesor, atau prosesor pandai mematikan unit fungsional yang tidak digunakan). Itu karena unit titik tetap umumnya lebih kecil (lebih sedikit transistor, kabel lebih pendek, lebih sedikit kapasitansi untuk diatasi per MAC) untuk teknologi tertentu dan tingkat masalah operasi, daripada floating point.
Namun sejumlah besar prosesor kontemporer umum (server, PC, dan bahkan ponsel), memiliki FPU lebih banyak dan lebih cepat (terutama unit FP presisi tunggal) daripada pengganda bilangan bulat, dan sebagian besar daya sistem bukan dari menggunakan FPU, jadi gunakan tetap -point akan memiliki sedikit atau tidak ada keuntungan untuk perhitungan DSP pada produk-produk ini, dan kemungkinan dapat menjadi kerugian dalam hal kinerja murni. Menggunakan teknologi saat ini, setiap keuntungan untuk titik tetap sebagian besar akan bertambah sebagian besar pada produk tertanam kecil, seperti perangkat berukuran tombol.
Namun, pertimbangkan juga memori dan jejak cache prosesor. Penggunaan cerdas tipe data yang lebih kecil (int pendek dan mengambang) agar sesuai dengan perhitungan besar sepenuhnya dalam cache data dapat mengimbangi keuntungan bandwidth FPU murni.
sumber
Lebih suka float presisi tunggal hingga dua kali lipat - ini akan membagi dua bandwidth memori Anda, jejak cache dan persyaratan penyimpanan, dan membuat beberapa operasi matematika lebih cepat. Ini juga membuka kemungkinan SIMD 4 arah jika optimasi lebih lanjut diperlukan.
Titik tetap hanya benar-benar bermanfaat ketika Anda tidak memiliki FPU - CPU x86 paling modern memiliki dua FPU sehingga tidak ada yang bisa diperoleh dari menggunakan titik tetap, dan kinerja bahkan mungkin jauh lebih buruk dengan titik tetap. (Perhatikan juga bahwa titik tetap memerlukan instruksi tambahan dibandingkan dengan titik mengambang untuk operasi seperti penggandaan.)
sumber
Selain jawaban yang sangat baik yang diberikan di sini, beberapa hal perlu ditambahkan:
sumber
Beberapa hal yang perlu dipertimbangkan:
Sebagai kata terakhir, saya pikir data dunia nyata kita sangat berharga dan angka buta komputer adalah pekerjaan rendah hati. Komputer harus melakukan pekerjaan berat untuk data Anda dan untuk Anda, dan tidak diperlakukan seolah-olah itu adalah bintang nyata dalam pertunjukan.
sumber