c - übergeben - mehrdimensionale arrays php




Rechnerisch effiziente dreidimensionale Arrays in C (2)

Das Buch Grundlagen von mehrdimensionalen und metrischen Datenstrukturen hilft Ihnen bei der Entscheidung, welche Datenstruktur für Bereichsabfragen am schnellsten ist: Octrees, Kd-Bäume, R-Bäume, ... Es beschreibt auch Datenlayouts, um Punkte im Speicher zusammenzuhalten.

Ich versuche numerisch einen Satz partieller Differentialgleichungen in drei Dimensionen zu lösen. In jeder der Gleichungen hängt der nächste Wert der Unbekannten in einem Punkt vom aktuellen Wert jeder Unbekannten in den nächstgelegenen Punkten ab.

Um einen effizienten Code zu schreiben, muss ich die Punkte nahe an den drei Dimensionen nah im (eindimensionalen) Speicherplatz halten, so dass jeder Wert nur einmal aus dem Speicher aufgerufen wird.

Ich dachte an Octtrees, aber ich fragte mich, ob jemand eine bessere Methode kennt.


Octtrees sind der Weg zu gehen. Sie unterteilen das Array in 8 Oktanten:

1 2
3 4

---

5 6
7 8

Und lege sie dann in der Reihenfolge 1, 2, 3, 4, 5, 6, 7, 8 wie oben beschrieben in das Gedächtnis. Sie wiederholen dies rekursiv innerhalb jedes Oktanten, bis Sie zu einer Basisgröße kommen, wahrscheinlich um 128 Bytes herum oder so (dies ist nur eine Vermutung - stellen Sie sicher, dass Sie ein Profil erstellen, um den optimalen Cutoff-Punkt zu bestimmen). Dies hat viel, viel bessere Cache-Kohärenz und Ort der Referenz als das naive Layout.





numerical