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

Zu wenig Speicher - Programm bricht ab, was tun?

 

thomas0815
Forum-Century

Forum-Century


Beiträge: 153
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2010, 12:59     Titel: Zu wenig Speicher - Programm bricht ab, was tun?
  Antworten mit Zitat      
Hallo,

ich habe nur ein Teil meines Problems und nur ein Teil meiner Problemgröße in Matlab gelöst und schon kommt die Fehlermeldung

??? Out of memory. Type HELP MEMORY for your options.

Was kann ich dagegen tun? Ich habe recht große Matrizen (400x10.000) und Arrays (500x400x10.000) auch einige for-schleifen, die sich nicht vektorisieren lassen. Kennt jemand das Problem und weiß Hinweise?

Danke und viele Grüße,
Thomas
Private Nachricht senden Benutzer-Profile anzeigen


yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 05.08.2010, 13:36     Titel:
  Antworten mit Zitat      
Moin Thomas,

unter der Annahme, dass sich wirklich nichts vektorisieren lässt (was i.A. nicht weniger Speicher, sondern mehr Geschwindigkeit bringt):

Kannst Du Speicher zwischendurch freigeben, weil der nicht mehr gebraucht wird? (Betrifft besonders Bereiche innerhalb von Funktionen, da Variablen ohne Rückgabe das Funktionsende nicht überleben.)

Können sparse-Matrizen eingesetzt werden?

Kannst Du die Matrizen aufteilen und dann Indices mitführen, die die Matrizen verbinden?
Das ginge, wenn eine Operation immer nur auf Teile zurückgreift.

HTH,
yankemen
_________________

Code:
% Kommentare brauchen ein Leerzeichen nach dem %
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 05.08.2010, 13:45     Titel:
  Antworten mit Zitat      
Weiterhin:

SINGLE statt DOUBLE nehmen
64 Bit Rechner und MATLAB nutzen

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
thomas0815
Themenstarter

Forum-Century

Forum-Century


Beiträge: 153
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.08.2010, 13:59     Titel:
  Antworten mit Zitat      
Hallo,

danke für die Antworten. Die Matizen wieder zusammen zu setzen, das könnte funktionieren, denn ich arbeite immer nur mit einem kleinen Teilbereich einer Matrix. Ich weiß allerdings nicht so recht, wie das in Matlab realisiert werden kann - gibt es dafür ein einführendes Beispiel?

Die Variablen von Double auf Single umzustellen werden ich probieren, allerdings weiß ich auch hier nicht wie.

Würde mich über weitere Hinweise sehr freuen.

Grüße,
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 06.08.2010, 10:45     Titel:
  Antworten mit Zitat      
Moin Thomas,

mit Auseinandernehmen und Zusammensetzen ist gemeint, dass Du manuell Dir überlegst, wie Du die Matrix so aufteilen kannst, dass Deine Operationen problemlos weiterlaufen.
Das kann auch bedeuten, wenn immer zehn benachbarte Zeilen oder Spalten durch den längeren Programmteil geschickt werden, der die Speicherfehler erzeugt, dann könntest Du mittels einer Schleife jeweils die zehn Zeilen extrahieren, also einer zweiten Matrix übergeben, diese bearbeiten lassen und sie dann wieder zurück schreiben, danach erneut extrahieren etc.
Oder, wenn es immer nur die gleichen Bereiche sind, diese herauslösen, bearbeiten, zurückschreiben. Sofern Du die Matrix nicht sowieso darauf einkürzen kannst, weil der Rest nicht mehr gebraucht wird.

Verwendung von single ist einfach:
Code:
a = rand(10);
b = single(a); % bzw. b = single(rand(10));
whos
Also natürlich jetzt nicht immer erst so vereinbaren und dann konvertieren. Es dient nur dem Unterschied zwischen zwei Matrizen. Hoffe, bei der Matrixaufteilung relevante Gedanken angestoßen zu haben. Mit der Zeit verstehst Du, wie Matlab funktioniert Smile
Ciao, yankemen
_________________

Code:
% Kommentare brauchen ein Leerzeichen nach dem %
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
thomas0815
Themenstarter

Forum-Century

Forum-Century


Beiträge: 153
Anmeldedatum: 13.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2010, 10:05     Titel:
  Antworten mit Zitat      
Hallo,

ich konnte das Speicherplatzproblem noch immer nicht erfolgreich lösen. Ich habe jetzt sämtliche arrays die nur ganze Zahlen beinhalten auch als solche belegt und die übrigen mit single-variablen belegt. Trotzdem kann ich bis jetzt nur ein viertel meiner Modellgröße lösen. Auch nicht mehr benötigte arrays lösche ich. Der Vorschlag mit den for-Schleifen macht meinen Code extrem langsam.

ich habe hier einmal die Speicherstatistik, falls sie etwas bringt

Physical Memory (RAM):
In Use: 1555 MB (613d8000)
Free: 1505 MB (5e10d000)
Total: 3060 MB (bf4e5000)
Page File (Swap space):
In Use: 1455 MB (5af7c000)
Free: 3491 MB (da36a000)
Total: 4946 MB (1352e6000)
Virtual Memory (Address Space):
In Use: 765 MB (2fd23000)
Free: 1282 MB (502bd000)
Total: 2047 MB (7ffe0000)
Largest Contiguous Free Blocks:
1. [at 319bf000] 236 MB ( ec81000)
2. [at 45413000] 184 MB ( b8ed000)
3. [at 5e0c5000] 129 MB ( 814b000)
4. [at 50e10000] 115 MB ( 73f0000)
5. [at 41138000] 65 MB ( 41a8000)
6. [at 25860000] 46 MB ( 2e10000)
7. [at 6a41c000] 45 MB ( 2d84000)
8. [at 68036000] 35 MB ( 23ca000)
9. [at 5b128000] 34 MB ( 2238000)
10. [at 2aa12000] 30 MB ( 1ebe000)
======= ==========
924 MB (39ca5000)
Was könnte ich noch machen?

Danke und Gruß,
Thomas
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 - 2025 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.