WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Neuer Versuch: MATLAB Arbeitsspeicher läuft voll

 

dudemeister
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2018, 17:57     Titel: Neuer Versuch: MATLAB Arbeitsspeicher läuft voll
  Antworten mit Zitat      
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

for nM = 1:M
 [OS_result_unc,h_u_TDD_unc, h_i_TDC_unc, zh_u_unc, zh_i_unc, hf_u_unc,hf_i_unc,valid,frequency_spectrum_abs,meanx,h_group_unc, zh_group_unc, hf_group_unc, h_ungrouped_unc] = MCS(Un, In, Sn, Pn, P_n, Skv, Sgesamt, fs, fn, nM, U_it1, U_ut1, U_ut_h, U_ut_zh, U_ut_hf, U_it_h, U_it_zh, U_it_hf, U_phi_it, U_phi_it_h, U_phi_it_zh, U_phi_it_hf, U_phi_ut, U_phi_ut_h, U_phi_ut_zh, U_phi_ut_hf);


% 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 Smile
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.08.2018, 09:33     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
dudemeister
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 08.08.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2018, 14:02     Titel:
  Antworten mit Zitat      
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!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.