Saya tertarik dalam mendirikan perhitungan untuk memeriksa apakah kriteria jarak puas: yaitu, jarak antara vektor dan vektor anter x j harus kurang dari beberapa nilai r m a x . Data saya dipartisi berdasarkan kisi koordinat ortogonal. Karena cutoff saya lebih kecil dari jarak antara titik akhir koordinat tetangga terdekat, saya ingin menambahkan variabel "oktan" untuk memeriksa apakah semuanya diatur dengan benar:
if octant[j] in allowed_list continue
sebagai "hubungan arus pendek" ke
if dist(x[i], x[j]) < r_max
Pertanyaan saya adalah: seberapa efisien komputasi boolean lookups dan perbandingan relatif terhadap operasi floating-point? Apakah ini layak dilakukan pada arsitektur modern?
efficiency
aeismail
sumber
sumber
Jawaban:
Aturan praktis saya adalah bahwa jika Anda dapat menghitung beberapa kuantitas secara efisien (pemanfaatan FPU yang baik) dalam waktu kurang dari 50 jepit per nilai presisi ganda, lebih baik untuk menghitung ulang daripada menyimpan. Tren, yang telah stabil selama beberapa dekade, adalah untuk kemampuan floating point untuk meningkatkan lebih cepat daripada kinerja memori, dan tidak mungkin mengalah karena kendala fisik dan kebutuhan energi dari memori cepat. Nilai 50 adalah besarnya yang tepat untuk semua platform komputasi populer (Intel / AMD, Blue Gene, dan GPU).
Perkiraan biaya perkiraan per inti
[pedoman untuk mesin berbasis Intel dan AMD 2011/2012]
MPI_Allreduce
Bacaan lebih lanjut
sumber