Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Studierende:
Praktikant Toolentwicklung Matlab (m/w)
Branche: Beratung, Expertise, Fahrzeugtechnik, Fahrzeugteile, Technische Dienstleistungen
MBtech Group GmbH & Co. KGaA - Fellbach

Abschlussarbeit / Praktikum: Entwicklung Matlab (m/w)
Branche: Informationstechnologie, Elektrotechnik, Elektronik
GIGATRONIK Technologies GmbH - Ulm

Studentischer Mitarbeiter (m/w) - DevOps / Toolentwicklung
Branche: mehrere
IAV GmbH - Ingenieurgesellschaft Auto und Verkehr - Berlin

Praktikant (m/w) Bereich Konzernvorausentwicklung - Aktoren sicherheitsrelevanter Anwendungen
Branche: Fahrzeugtechnik, Fahrzeugteile, Maschinentechnik, Industrietechnik
MAHLE International GmbH - Stuttgart

Praktikum - Softwareentwicklung Java
Branche: mehrere
IAV GmbH - Ingenieurgesellschaft Auto und Verkehr - Dresden, Gifhorn

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Begrenzung von Speicher

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.11.2016, 08:35     Titel: Begrenzung von Speicher
  Antworten mit Zitat      
Hallo,
bei Matlab 2016a kann ich unter "Preferences"

"Limit the maximum array size to a percentage of RAM"
einstellen.

Kann ich dies auch irgendwie über einen Befehl im Skript / in der Funktion
umsetzen.

Mein Ziel ist es, dass Matlab nicht mehr als 2GB Speicher braucht, weil nur soviel
vorhanden sind, und danach zum swapen angefangen werden würden.

VG
Torsten


Jan S
Moderator

Moderator


Beiträge: 10.481
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.11.2016, 11:14     Titel: Re: Begrenzung von Speicher
  Antworten mit Zitat      
Hallo,

Das ist eine gute Frage!

Dieser Schalter kann nicht kontrollieren, wie viel Speicher Matlab verwendet. Er sorgt nur dafür, dass man eine Fehlermeldung bekommt, wenn man aus Versehen ein zu großes Array alloziert. Man kann aber immer noch 1000 kleine allozieren, die genazuso viel RAM benötigen.

Zitat:
Mein Ziel ist es, dass Matlab nicht mehr als 2GB Speicher braucht, weil nur soviel vorhanden sind, und danach zum swapen angefangen werden würden.

Die Antwort darauf ist indirekt: Was zählst Du zu dem Speicher, den Matlab verbraucht? Das Executable wird geladen und initialisiert. Das OS erzeugt Matlab's GUI und verwendet für jedes Fenster und jeden Button eigenen Speicher. Jedes geöffnete File wird im RAM gecacht, wobei das OS entscheidet, wie viel RAM dafür verwendet wird. Wenn Du ein in Matlab erzeugtes Array löschst, wird zunächst nur der Handle auf den Speicher freigegeben. Das OS kümmert sich dann darum, den Speicher mit Nullen zu überschreiben, wenn es Zeit findet. Erst dann steht er wieder für neue Arrays zur Verfügung.
Das OS schieb aktuell nicht benötigte Programm-Teile, z.B. DLLs, in den Virtuellen Speicher. Das ist effizient und nützlich, denn es wäre Verschwendung, dies im RAM zu halten. Wozu sollte Matlabs Hilfesystem im RAM gehalten werden, wenn man es gerade gar nicht offen hat? Insofern ist das swappen auf die Festplatte sehr praktisch.

Das bedeutet: Es ist sehr schwer zu definieren, wie viel RAM Matlab "braucht". Weder die Anzeige von feature memstats noch die Anzeige im TaskManager ist hier wirklich fundiert. Noch schwerer ist es zu kontrollieren, wie viel RAM Matlab verbraucht. Mit einem einfachen Schalter ist das jedenfalls bestimmt nicht zu machen und auch die erwähnte Funktion in den Preferences sorgt nur dafür, dass man nach einem versehentlichen rand(1e6) statt rand(1, 1e6) nicht das RAM so zukleistert, dass die Maschine in Bedrängnis gerät.

Nur geschicktes und umsichtiges Programmieren kann helfen, den RAM-Verbrauch zu kontrollieren: Vermeidung temporärer Variablen, Struct of Arrays statt Array of Structs, keine Neudefinition einer bestehenden Variablen mit anderem Typ, die Anzahl offener Files begrenzen, Pre-allocation (Variablen nicht iterativ Wachsen lassen), und nach Möglichkeit Matlab 6.5 verwenden (das ist natürlich ein Scherz, auch wenn es faktisch korrekt ist).
Aber auch wenn man möglichst schlank programmiert, können 2GB RAM schnell erschöpft sein. Die Frage ist, was dann geschehen soll: Soll Matlab mit einer Fehlermeldung abbrechen und sicherheitshalber alle Arrays freigeben und offenen Files schließen? Das geschieht bereits, wenn der Rechner wegen überfülltem RAM abschmiert. Was wäre dann also gewonnen?

Gruß, Jan
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.