|
thomas0815 |

Forum-Century
|
 |
Beiträge: 153
|
 |
|
 |
Anmeldedatum: 13.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.08.2010, 18:50
Titel: Speicherplatzproblem
|
 |
Hallo,
ich greife noch einmal mein Speicherplatzproblem auf, weil ich mir da mit keiner Lösung zu helfen weiß.
Ich erhalte folgende Fehlermeldung
??? Error using ==> vertcat
Out of memory. Type HELP MEMORY for your options.
ich arbeite in meinem Programm mit
8 Arrays (200x365x10.000)
9 Arrays (10.000x200)
5 Arrays (200x365)
6 Arrays (10.000x365)
Ich habe schon sämtliche möglichkeiten ausgenutzt, Arrays, die ganzzeilig sein können, sind als solche definiert, alle übrigen sind als single definiert. Im Programmablauf nicht mehr benötigte Arrays werden mit Array 0 [] gelöscht.
Was kann ich noch tun?
Eine Unterteilung in mehere kleinere Arrays in Verbindung mit for-Schleifen ist aufgrund der Rechenzeit nicht möglich.
Bin für Hinweise sehr dankbar.
Viele Grüße,
Thomas
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.08.2010, 19:27
Titel:
|
 |
Hallo,
1. Debugger in Verwendung mit whos verwenden, um sicherzustellen, dass nicht benötigte Arrays *wirklich* gelöscht werden.
2. Mit for-Schleifen arbeiten. Eine for-Schleife ist nicht zwangsläufig viel langsamer als die vektorisierte Variante; die Probleme liegen meist in fehlender Vorbelegung des Speichers oder geschachtelten Schleifen.
3. Mehr Speicher auf einem 64bit-System.
4. Parallel Computing, um mehrere Kerne eines Rechners oder auch mehrere Rechner zu nutzen.
Grüße,
Harald
|
|
|
thomas0815 |
Themenstarter

Forum-Century
|
 |
Beiträge: 153
|
 |
|
 |
Anmeldedatum: 13.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 17.08.2010, 10:20
Titel:
|
 |
Hallo Harald,
danke für die Antworten. gibt es nicht einfacher umzusetzende Möglichkeiten - z.B. mehr Speicherplatz für das Programm zu reservieren oder so etwas in der Art.
- Die Arrays werden dann sofort gelöscht, wenn sie nicht mehr gebraucht werden
- Die Sache mit den for-schleifen funktioniert nicht so einfach; bzw. ich habe noch keine Idee wie ich das umsetzen könnte
- Ein 64-Bit System habe ich leider nicht zur Verfügung
- die Parallel Computing Toolbox habe ich leider auch nicht.
Viele Grüße,
Thomas
|
|
|
aj.geissler |

Forum-Guru
|
 |
Beiträge: 251
|
 |
|
 |
Anmeldedatum: 26.11.07
|
 |
|
 |
Wohnort: Seeheim-Jugenheim
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 17.08.2010, 10:37
Titel:
|
 |
Hallo Thomas,
ein Array mit 200 x 365 x 10000 Werten benötigt bei 4 Byte/Wert ca. 2.7 GByte ? Bei 2 Byte dann immer noch 1.35 GB. (Hab mich hoffentlich nicht verrechnet ?)
8 Arrays (200x365x10.000) -> 10.8 GB ?
9 Arrays (10.000x200) -> kleine MB's
5 Arrays (200x365)
6 Arrays (10.000x365)
Da ja noch andere Variablen definiert sind, würde ich Dir vorschlagen, daß Du die Variablen als (temporäre) Dateien in binärer Form auf die Festplatte schreibst und dann bei der Verarbeitung "Segmente" oder einzelne Werte ausliest.
Wie viel Speicher hat denn Dein PC ?
Grüße
Andreas
_________________
Andreas Geißler
|
|
|
thomas0815 |
Themenstarter

Forum-Century
|
 |
Beiträge: 153
|
 |
|
 |
Anmeldedatum: 13.05.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 17.08.2010, 11:25
Titel:
|
 |
Hallo Andreas,
ja, ich weiß - es ist wirklich viel Speicher, der dafür benötigt wird. Ich habe 3 GB Arbeitsspeicher und 110 GB freien Festplattenspeicher. Bringt es eigentlich etwas, wenn ich virtuellen Speicher in der Systemverwaltung frei gebe, den habe ich jetzt auf max. 10 GB gesetzt oder gibt das keine Aussicht auf Erfolg?
Wie könnte das denn aussehen, wenn ich Variablen als temporäre Dateien in binärer Form auf die Festplatte schreibe?
Grüße,
Thomas
|
|
|
aj.geissler |

Forum-Guru
|
 |
Beiträge: 251
|
 |
|
 |
Anmeldedatum: 26.11.07
|
 |
|
 |
Wohnort: Seeheim-Jugenheim
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 17.08.2010, 12:39
Titel:
|
 |
Hallo Thomas,
ausschließen kann ich nicht, daß das mit dem virtuellen Speicher nicht funktioniert.
Am Besten, einfach mal ausprobieren.
Kann man ja (hoffentlich) wieder rückgängig machen.
Ansonsten schau mal in der Hilfe nach. Gute Einstiegspunkte sind "fread", "fopen", "fwrite" und "fseek".
Für jede Variable würde ich eine "feste" mit von dir definiertem Pfad und Namen versehene Datei verwenden.
Ich hoffe, daß die Dateigröße > 2GB keine Scherereien macht.
Grüße
Andreas
_________________
Andreas Geißler
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 17.08.2010, 14:22
Titel:
|
 |
Hallo,
ich würde vermuten, dass eine for-Schleife schneller sein wird als auf die Platte zu schreiben / von ihr zu lesen.
Und wenn die Datei schon direkt von der Platte bearbeitet wird, wird auch memory-mapped Files (memmapfile) hilfreich sein. So oder so, die ganze Matrix auf einmal wird man wohl nicht bearbeiten können, weil sie ja nicht in den Speicher passt.
Grüße,
Harald
|
|
|
|
|
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.
|
|