Hallo liebe Forum Gemeinde, ich starte noch einmal einen neuen Versuch bezüglich meines Problems... ich habe herausgefunden, dass der Arbeitsspeicher irgendwie 'voll läuft'...
Ich habe ein Simulation die 100000 mal durchlaufen soll gerne, zu Beginn ist die Hälfte meines Arbeitsspeichers in Benutzung aber bereits nach 100 Durchläufen 0.1 Ram mehr...
Hier einmal eine kleine Übersicht der Initialisierungsebene.. ich glaube hier steckt der Deibel begraben ..
Code:
% hier wird zunächst die Funktion aufgerufen in der die Berechnungen stattfinden, darunter sind noch einige Ebenen weiterer Funktionsaufrufe
% Die Ergebnismatrizen haben mehrere Zeilen, hier bei den hier aufgeführten jetzt 51, und es wird pro structz denn imemr ein zeile gespeichert, sodass man bei 100.000 Durchläufen die Zeile 1 quasi zu vergleichszwecken 100000 mal hat % Die Ergebnisse werden dann in structs gespeichert mit folgender Form:
for i = 1:51
Ergebnis_unc.u_zh_percentage{i}(nM,1:3) = OS_result_unc.ZH_percentage(i,1:3);
Ergebnis_unc.i_zh_percentage{i}(nM,1:3) = OS_result_unc.ZH_percentage(i,4:6);
mean_check.u_zh_mean{i}(nM,1:3) = meanx.zh_mean(i,1:3);
mean_check.i_zh_mean{i}(nM,1:3) = meanx.zh_mean(i,4:6);
mean_check.u_zh_mean_percentage{i}(nM,1:3) = meanx.zh_mean_percentage(i,1:3);
mean_check.i_zh_mean_percentage{i}(nM,1:3) = meanx.zh_mean_percentage(i,4:6);
group_check.zh_u{i}(nM,1:3) = zh_group_unc{1,1}(i,1:3);
end
Nun werden die structs ja pro Durchlauf immer größer, aber da diese ja nur Verweise sind benötigen die doch keine zusammenhängenden Speicher und Präallokation wird dann wohl keine Performance Steigerung bringen? Nach einem Schleifendurchlauf werden auch alle Ergebnisvariablen wieder gecleart, weshalb ich erwarten würde, dass keine Fragmente den RAM belegen? Oh mann ich habe noch 2 Monate und 10 Tage bis zur Abgabe meiner Master Thesis und mit diesem verflixten Speicherproblem wo denn die Durchläufe bereits nach 1000 Versuchen statt 5 Sekunden locker 25 brauchen wird das nix :C
Vielleicht hat jemand eine Idee wie man den Speicherbedarf etwas begrenzen kann... mein ewiger Dank sei gewiss
das ist so schwer nachzuvollziehen, ohne die beteiligten Variablen und Funktionen zu kennen. Im Workspace Browser kannst du dir das Attribut Bytes anzeigen lassen und so sehen, welche der Variablen groß werden.
Grundsätzlich stellt sich die Frage, warum du die Ergebnisse überhaupt im Speicher vorrätig halten willst. Meist ist das Ergebnis ja ein Plot oder eine zusammengefasste Information. Dann würde ich das gleich erzeugen und die Daten gar nicht erst sammeln.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Hey liebe Forum Gemeinde,
Im Thesis Stress habe ich glatt vergessen mich nochmal zu melden...
vielen Dank Harald für dne Tipp... Ich habe ein Zwischenspoecheurng dergrößten MAtrix eingebaut, was dasPerfomance Problem gelösthat...isngesamt sind es nun 170 GB an zwischengepsiecherten Daten, die ich allerdings nochmal für die Auswertung noch einmal inden Workspace laden muss... das wird noch ein kleines Abenteuer :Daber soweit auf jeden Fallvielen Dank!
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.