Ich arbeite daran, ein in Fortran geschriebenes Analyseprogramm für Flüssigkeitsströmung und Wärmeübertragung zu optimieren. Während ich versuche, größere und größere Mesh-Simulationen auszuführen, stoße ich auf Speicherbeschränkungsprobleme. Das Netz ist jedoch nicht so groß. Nur 500.000 Zellen und kleine Erdnüsse lassen einen typischen CFD-Code laufen. Selbst wenn ich 80 GB Speicher für mein Problem anfordere, stürzt es aufgrund unzureichenden virtuellen Speichers ab.Fortran-Array-Speicherverwaltung
Ich habe ein paar Vermutungen darüber, welche Arrays sind all diese Speicher. Einer wird insbesondere zugeordnet (28801,345600). Korrigieren Sie mich, wenn ich falsch in meinen Berechnungen bin, aber ein Array mit doppelter Genauigkeit ist 8 Bits pro Wert. Also wäre die Größe dieses Arrays 28801 * 345600 * 8 = 79,6 GB?
Jetzt denke ich, dass die meisten dieser Array endet Nullen während der Berechnung, so dass wir sie nicht speichern müssen. Ich denke, dass ich den Lösungsalgorithmus ändern kann, um nur die Nicht-Null-Werte zu speichern, um in einem viel kleineren Array zu arbeiten. Ich möchte jedoch sicher sein, dass ich auf die richtigen Arrays schaue, um sie zu verkleinern. Also, zuerst, habe ich die Array-Größe oben korrekt berechnet? Und zweitens, gibt es eine Möglichkeit, Fortran Array-Größen in MB oder GB zur Laufzeit anzeigen zu lassen? Neben dem Ausdruck der meisten speicherintensiven Arrays wäre es interessant zu sehen, wie sich die Speicheranforderungen des Codes während der Laufzeit ändern.
Wie viel tatsächlichen Speicher haben Sie auf der Maschine, auf der Sie das ausführen? Außerdem liegen Sie falsch in Ihrer Annahme * doppelte * Genauigkeit ist 8 Bytes, nicht 8 Bits. Das ergibt etwa 74.16 GB Daten (1024 und nicht 1000). Auch, bin ich richtig in der Annahme, dass Sie tun 4 Tage im Wert von Daten (345600 Sekunden = 60 * 60 * 24 * 4) –
Mike, das wird auf einem Cluster mit bis zu 96 GB Arbeitsspeicher pro Knoten ausgeführt, die ich kann anfordern. Sorry über die Verwirrung von Bytes und Bits und danke, dass du das geklärt hast, aber ich bin da im richtigen Stadion, so dass die Array-Größe definitiv ein Problem ist. Und nein, dass 345600 mit der Anzahl der Zellen im Modellnetz zusammenhängt und nichts mit der Zeit zu tun hat. – rks171
@ user104629: Ein Grund warum könnte sein, dass es kein zusammenhängendes Array von 80 GB Speicher zuordnen kann. –