|
Gast |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2009, 09:27
Titel: Speicherprobleme
|
 |
Guten Morgen!
Ich habe jetzt schon seit einiger Zeit Probleme mit dem Speicher bei Matlab. Ich muss relativ goße Datenmengen auswerten und leere den Speicher nach jedem Programm mit dem Befehl "clear". Ich dachte, dass durch diesen befehl der gesamte Speicher wieder freiegegeben wird. Allerdings zeigt sich folgendes:
Physical Memory (RAM):
In Use: 339 MB
Free: 659 MB
Total: 999 MB
Page File (Swap space):
In Use: 543 MB
Free: 1862 MB
Total: 2406 MB
Virtual Memory (Address Space):
In Use: 1387 MB
Free: 660 MB
Total: 2047 MB
Gibt es dafür eine Erklärung? Es ist ziemlich nervig, da ich momentan nach jeder Auswertung Matlab neu starten muss, um mit der nächsten Auswertung fortzufahren. Ansonsten erscheint immer die Fehlermeldung "out of memory".
ich hoffe, ich habe mein Problem verständlich geschildert und würde mich freuen, schon bald einen Lösungsvorschlag zu bekommen.
Beste Grüße
|
|
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 10.11.2009, 09:56
Titel:
|
 |
Es gibt sehr viele verschiedene Optionen wie man auf MATLAB Seite dem begegnen kann. Ich würde gerne mehr über die "relativ grossen Datenmengen" und die Art der Auswertung wissen. Ein paar Eingangsfragen:
o 32 Bit oder 64 Bit System? Ist ein 64 Bit Rechner zur Verfügung?
o Wie grosse ist die grösste Variable im Workspace? Wird sie schon in der Grösse eingelesen oder ist sie Ergebnis einer Berechnung?
o Können Daten von DOUBLE in kleinere Datentypen umgewandelt werden?
Andreas
|
|
|
Gast |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2009, 10:11
Titel: Berlin
|
 |
Hallo!
Zunächst vielen Danke für die schnelle Antwort! Die Auswertungen führe ich auf einem 32Bit-System durch. Ein 64-Bit-System steht leider nicht zur Verfügung.
Ich lese Daten in der Größe von ~150MB ein, filter meine benötigten Daten heraus, lege diese in einer neuen struktur ab, lösche die Daten aus dem Workspace und lese die nächsten daten ein...usw. wie gesagt, ich bereinige den Workspace regelmäßig mit "clear", dennoch wird der Speicher nicht geleert.
Also mit den Datentypen kenne ich mich noch nicht so gut aus. es sind halt Messwerte mit einer Genauigkeit von 4 Nachkommastellen. Diese lege ich incl. zugehöriger Namen in einer Struktur ab.
Aber dennoch...wird mit dem Befehl "clear" also nicht der gesamte Speicher gelöscht und wieder freigegeben?
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 10.11.2009, 10:53
Titel:
|
 |
150 MB sollten eigentlich kein Problem darstellen, zumal ja die weitere Verarbeitung nur mit einem Teil der Daten geschieht.
Wenn Struktur im Sinne von STRUCT gemeint ist könnte das eine Teil des Problems darstellen. STRUCTs sind nicht sehr speichereffizient.
CLEAR löscht zwar die Variablen, aber letzendlich wird nur der Verweis gelöscht - der Speicher fragmentiert zunehmend. Da kann es helfen mit CLEAR und PACK zu arbeiten.
Andreas
|
|
|
Gast |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2009, 11:14
Titel:
|
 |
Also meine Ausgangs-Daten sind ebenfalls in Strukturen gespeichert. Ich rufe nacheinander 5 Strukturen (jeweils ~150MB) auf und lösche diese wieder. Meine benötigten Daten speicher ich in 50 Strukturen ab, die jeweils eine Größe von 6MB haben. Diese speicher ich ab und lade sie nur in den Workspace, wenn ich diese auch benötige.
Ich habe es auch schon mit "pack" versucht. Aber das hat so gut wie gar nicht geholfen. Gibt es denn eine sinnvolle Alternative zu Strukturen "Struct"?
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 10.11.2009, 11:28
Titel:
|
 |
Woher kommen denn die STRUCT Daten? Sind das schon MAT Dateien von anderen Nutzern? Was passiert denn hinterher damit, also welche Art von Datenverarbeitung?
Hier ein Beispiel aus der Signalverarbeitung. Man kann sich vorstellen diese sind einiger Millionen Messwerte in DOUBLE. Diese Präzision braucht aber keiner:
Für mittleres n (z. B. 4000) sehe ich einen Speicher- und Performancevorteil von 2x. Komme ich an Speichergrenzen, wie z.B. 12000, dann habe ich einen Performancevorteil von 6x.
Andreas[/code]
|
|
|
Gast |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.11.2009, 11:40
Titel:
|
 |
Genau. Die STRUCT Daten bekomme ich schon als MAT Dateien von anderen Nutzern.
Ich werte diese Daten nach verschiedenen Kriterien aus, so dass ich entsprechend die benötigten Daten heraus filter und in einer neuen kleinen STRUCT speicher. Letztendlich lasse ich mir verschieden Grafiken ausgeben.
Also ich benötige schon alle Messwerte, in dieser Hinsicht wäre also kein Platz zu sparen.
Ich habe jetzt auch noch immer nicht ganz verstanden, warum Matlab nach dem Befehl "clear" nicht den gesamten Speicher leert...
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 10.11.2009, 12:33
Titel:
|
 |
Hallo
Struct braucht einfach großen zusammenhängenden Speicherblock
Außer Struct hast du bestimmt noch andere Variablen.
Z.B.
Es stehen 300MB zur Verfügung
Struct nimmt 150 MB,
dann reservieren noch andere Variablen für sich Speicher.
Wenn du Struct löscht, wird zwar Speicher frei, aber es bleiben zu Hälfte reservierte Blöcke trotzdem übrig.
Also hast du deswegen keinen zusammenhängenden Block mehr der Groß genug wäre, und es kommt zu diesem Out of Memory.
Es passiert oft dass es beim Laden zu Out of Memory kommt, da die Daten noch komprimiert sind, brauch Matlab kurzzeitig sogar mehr Speicher.
Versuch Structs unkomprimiert umzuspeichern, arbeite dann nur mit diesen Files
|
|
|
Gast |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.11.2009, 12:17
Titel:
|
 |
Vielen Dank für die zahlreichen Antworten bisher!
Dass die Strukturen also viel Speicher benötigen, habe ich inzwischen verstanden. Aber warum wird mit dem Befehl "clear" nicht wieder der ganze Speicher freigegeben?
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 16.11.2009, 13:37
Titel:
|
 |
Der Speicher wird freigegeben, aber der zu Verfügung stehende Speicher wird immer weiter fragmentiert.
Andreas
|
|
|
Gast |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.11.2009, 12:50
Titel:
|
 |
Hallo nochmal!
Ich habe das mit dem Speicher wohl immer noch nicht so richtig verstanden. Dass der Speicher aufgrund der Strukturen immer weiter fragmentiert wird, verstehe ich ja noch. Aber warum stellt der Befehl "clear" nicht den kompletten Speicher wieder her bzw. defragmentiert den Speicher wieder?
Ich habe das Problem, dass ich momentan regelmäßig Matlab neu starten muss, damit die Programme wieder laufen. Beim Neustart von Matlab wird also der gesamte Speicher wieder hergestellt. Gibt es da keinen Befehl, der mir den Neustart erspart?
|
|
|
baronsocke |

Forum-Anfänger
|
 |
Beiträge: 15
|
 |
|
 |
Anmeldedatum: 21.05.14
|
 |
|
 |
Wohnort: Köln
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.07.2014, 13:43
Titel:
|
 |
Ich habe ein ähnliches Problem wie hier geschildert wurde.
Ich arbeite an einem 32bit Windows Rechner.
In Matlab muss ich RAW-Bilder (jeweils eine Größe von 50 MB) auswerten.
Nach meinen Testaufnahmen habe ich ca. 400 RAW Bilder á 50 MB, die ich erstmal ganz normal auf der Festplatte speichere.
Nacheinander muss ich die Bilder auswerten, jedoch brauche ich immer 19 Bilder auf einmal. Diese 19 Bilder speichere ich in einem STRUCT ab.
Hier stoße ich an das gleiche Problem wie mein Vorposter. Der Rechner gibt irgendwann eine Fehlermeldung mit "out of memory" aus. Der Befehl "clear" reicht nicht, um genug Speiche freizugeben, ich muss Matlab neu starten.
13 Bilder kann ich auf einmal verarbeiten, bei 19 meckert er immer.
Wie kann ich das Problem lösen?
Besteht die Möglichkeit nur Pfade abzuspeichern?
Besten Dank und viele Grüße
Yvo
|
|
|
HansPeterJosef |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.10.2014, 13:12
Titel: Hilfe
|
 |
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|