Ich bin daran interessiert, Berechnungen aufzustellen, um zu prüfen, ob ein Abstandskriterium erfüllt ist: Das heißt, der Abstand zwischen einem Vektor und einem anderen Vektor sollte kleiner sein als ein Wert . Meine Daten sind nach einem orthogonalen Koordinatenraster unterteilt. Da mein Grenzwert kleiner ist als der Abstand zwischen den Endpunkten der Koordinaten des nächsten Nachbarn, möchte ich eine "Oktanten" -Variable hinzufügen, um zu überprüfen, ob die Einstellungen korrekt sind:
if octant[j] in allowed_list continue
als "Kurzschluss" zu
if dist(x[i], x[j]) < r_max
Meine Frage lautet: Wie effizient sind boolesche Suchen und Vergleiche im Vergleich zu Gleitkommaoperationen rechnerisch? Lohnt sich dies für moderne Architekturen?
efficiency
aeismail
quelle
quelle
Antworten:
Meine Faustregel ist, dass es besser ist, neu zu berechnen, als zu speichern, wenn Sie eine Menge effizient berechnen können (gute Auslastung der FPU), und zwar in weniger als 50 Flops pro doppeltem Präzisionswert. Der seit Jahrzehnten anhaltende Trend geht dahin, dass sich die Fließkommafähigkeit schneller verbessert als die Speicherleistung, und aufgrund physikalischer Einschränkungen und des Energiebedarfs des schnellen Speichers wahrscheinlich nicht nachlässt. Der Wert 50 ist für alle gängigen Computerplattformen (Intel / AMD, Blue Gene und GPUs) gleich groß.
Ungefähre Kostenschätzungen pro Kern
[Richtlinien für 2011/2012 Intel- und AMD-basierte Maschinen]
MPI_Allreduce
Weitere Lektüre
quelle