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

Maximale Variablengröße überschritten - Hilfe!!

 

PieceX
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 11.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2011, 20:21     Titel: Maximale Variablengröße überschritten - Hilfe!!
  Antworten mit Zitat      
Moin, hier kurz und knapp mein Problem!

Ich habe ein 11265x17472 großes Bild, welches sich problemlos mit imread(...) öffnen lässt;
ich erhalte also eine 11265x17472x3 uint8 Matrix.
Das macht meine 4GB Speicher unter Windows 7 64bit Matlab (7.04.365 SP2) auch problemlos mit.

Wenn ich versuche eine Farbkanal-Maskierung zu ertellen, klappt das nur bis zum 2ten Kanal.

Hier das Beispiel:
Code:

Z = false([11265 17472]);
Z(:,:,2) = false([11265 17472]);
 

klappt soweit super
Code:

Z(:,:,3) = false([11265 17472]);
 

->
??? Maximum variable size allowed by the program is exceeded.

Warum nur?
Ich könnte diese logische Matrix mindestens 8mal im Speicher ablegen
solange sie als einzelne Matrizen deklariert werden also Z1, Z2, ...
pack, oder clear helfen auch nicht weiter.

Bitte helft mir ...
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: 07.01.2011, 21:57     Titel:
  Antworten mit Zitat      
Hallo,

funktioniert folgendes?
Code:
Z = false([11265 17472 3])


Was ist der Output von
Code:


Andere Fragen:
- müssen die RGB-Ebenen zwangsläufig gleichzeitig zur Verfügung stehen, oder ginge auch, das nacheinander zu machen?
- Was soll mit den Resultaten gemacht werden?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
PieceX
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 11.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2011, 22:05     Titel: Work Around
  Antworten mit Zitat      
Also so funtkioniert es:

Code:
RGB = false(11265,17472,3);


Scheinbar hat Matlab damit Probleme, Speicher vernünftig zu verwalten ... oder wo liegt das Problem?

*edit*
... Jupps, das ging aber schnell, Harald Smile

Hatte schon fieberhaft weiterprobiert und Deinen Post gar nicht so richtig mitbekommen.

Also der Befehl memory liefert mir nichts außer das Prompt *kratz*.

Zu Deinen anderen Fragen:

Die Farbkanäle sind Rückgabewerte einer aufwändigen Segmentierungsfunktion. Sie sollen später wieder in ein Ergebnisbild zurückgespeichert werden. Vorher werden sie tatsächlich getrennt behandelt.
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: 07.01.2011, 22:57     Titel:
  Antworten mit Zitat      
Hallo,

die Speicherverwaltung ist in erster Linie Sache des Betriebssystems... und da ist es anscheinend besser, einen großen Block anzufordern als nach und nach aufzustocken.

Es dürfte allerdings auch von Seiten der Geschwindigkeit besser sein, wenn du die Daten zunächst nach und nach verarbeitest. Wenn ein Rechner an seine Speichergrenzen stößt, wird er meist auch langsamer.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
PieceX
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 11.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.01.2011, 23:14     Titel:
  Antworten mit Zitat      
Danke für Deine prompte Antwort, Harald.

Wenn ich Dich richtig verstanden habe, startet Matlab mit ein paar MB Speicher und fordert dann Stück für Stück neuen Speicherplatz vom BS an.
Dabei versucht das BS möglichst passende Stücke freizugeben. Wenn die darin befindliche Variable dann aber noch mehr Platz bekommen soll und dies über den vom BS allozierten Speicherbereich hinausgeht, dann gibt es diese Fehlermeldung ... richtig?

Hast Du eine Ahnung, wie man Matlab von vornherein einen Speicherbereich zuweist, also den Speicherbedarf künstlich aufbläht, damit das BS sich nicht weiter darum kümmern muss?

Wieviel Platz belegt ein logical-Wert bei Matlab eigentlich?

Grusz
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.01.2011, 23:38     Titel:
  Antworten mit Zitat      
Hallo PieceX,

Zitat:
Dabei versucht das BS möglichst passende Stücke freizugeben. Wenn die darin befindliche Variable dann aber noch mehr Platz bekommen soll und dies über den vom BS allozierten Speicherbereich hinausgeht, dann gibt es diese Fehlermeldung ... richtig?

Nein, nicht richtig. Die Fehlermeldung ist eindeutig nicht "Out of memory", sondern "Maximum variable size allowed by the program is exceeded". Das ist unter 64-Bit-Matlab sehr merkwürdig.
Und "Z(:,:,3) = false([11265 17472]);" überschreitet die Maximalzahl von Elementen nicht mal unter 32-Bit-Matlab. Da gibt es wohl einen anderes Problem, dass auch unter Matlab 6.5 schon auftritt. Ich forsche mal ein wenig...

Zitat:
Hast Du eine Ahnung, wie man Matlab von vornherein einen Speicherbereich zuweist, also den Speicherbedarf künstlich aufbläht, damit das BS sich nicht weiter darum kümmern muss?

Für ein einzelnes Array klappt das mit der üblichen Pre-Allocation. Ganz allgemein für alle Arrays, die da so kommen werden, geht das aber nicht.

Zitat:
Wieviel Platz belegt ein logical-Wert eigentlich?

Ein Byte. Siehe:
Code:


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
PieceX
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 11.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2011, 00:03     Titel:
  Antworten mit Zitat      
Danke für den Tipp, Jan!

Code:
habe ich gesucht.

Hast Du eine Ahnung, warum
Code:
nichts macht?

Ich meine, eine ältere 32bit Matlab-Version zu besitzen. Sollte aber aus meiner Versionsangabe hervorgehen ... oder(hab ein wenig bei meinen Angaben geschlampt,Rolling Eyes, die 64bit bezogen sich auf Win7)?

Grusz
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.01.2011, 00:20     Titel:
  Antworten mit Zitat      
Hallo PieceX,

Das ist ein Bug.
Code:
z1 = false(11265, 15887, 3);  % ok!
z2(:, :, 3) = false(11265, 15887);  % Maximum variable size exceeded!
 

Ich habe solange die zweite Dimension verkleinert, bis ich bei 15887 angekommen bin. Für 15886 klappt es wieder. Ein kurzer Test mit LOG2 verrät, dass Matlab beim Überschreiten der 29-Bit-Grenze einen Fehler produziert.

Ich würde das gerne in der CSSM-Newsgroup diskutieren.
Kannst Matlab einen Bugreport schicken?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.01.2011, 00:24     Titel:
  Antworten mit Zitat      
Hallo PieceX,

Zitat:
Hast Du eine Ahnung, warum
Code:
nichts macht?

Unter Matlab 6.5 besteht "memory" nur aus Kommentaren. Der Aufruf von "memory" bewirkt also nichts. "help memory" zeigt dagegen den Hilfe-Text an.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
PieceX
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 11.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2011, 01:23     Titel:
  Antworten mit Zitat      
Ah, ja... also ein Bug schmeißt sich mir vor den fahrenden Studienbetrieb ... Ehrlich gesagt hab ich noch nie so einen Bug-Report an Matlab geschrieben;
zudem muss ich nächste Woche die Ergebnisse meinem Prof präsentieren (darf also nicht zu viel Zeit kosten).

Sonst mach ich das natürlich gern ...

Ähhm, doofe Frage, aber muss ich bei Matlab registriert sein, um diesen Bug-Report abschicken zu können. Ist nicht meine Version ...

Dann erstmal gute Nacht, hab heute schon zuviel gemacht
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.01.2011, 02:17     Titel:
  Antworten mit Zitat      
Hallo PieceX,

Zitat:
Ähhm, doofe Frage, aber muss ich bei Matlab registriert sein, um diesen Bug-Report abschicken zu können.

Ich finde die Frage gar nicht doof.
TMW hat in der Vergangenheit einen Bugreport von mir zurückgewiesen, weil ich die Ausgabe von "ver" nicht mitgeschickt hatte, und ihnen so der Lizenzschlüssel fehlen würde. Um die Matlab Versions Nummer ging es nicht, da ich mich ausdrücklich auf mehrere Releases bezog. Niedlich - ich wollte ja keinen Support in Anspruch nehmen, sondern ihr Produkt verbessern...
Als ich dann aber die "ver"-Ausgabe von meiner Arbeitsstelle nachgereicht hatte, war das TMW-Team wieder zuvorkommend und freundlich wie immer.

Ich könnte den Report also gerne für Dich schicken. Ich will mich aber nicht mit Deinen Federn schmücken.

Gruß und gute Nacht, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
PieceX
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 11.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2011, 09:50     Titel:
  Antworten mit Zitat      
Guten Morgen, Jan!

So etwas habe ich mir schon gedacht ... Bei Deinen Ausführungen muss man sich doch wirklich am Kopf kratzen (oder demonstrativ in der Nase bohren):
Wenn die finanziellen Interessen vor der Qualitätverbesserung des Produktes kommen ... das hat selbst Microsoft *hust* schon herausgefunden.

Ich nutze Matlab lediglich für meine Studienarbeit und habe demnach kein besonderes Interesse, für ein so teures Produkt das Versuchskanninchen zu spielen.

Was die Federn betrifft, so hast Du den Bug in erster Linie gefunden, denn ich bin nur darüber gestolpert. Schmücke Dich ruhig damit, dann hab ich den Stress vom Hals.

Grusz
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: 08.01.2011, 10:14     Titel:
  Antworten mit Zitat      
Hallo PieceX,

welche MATLAB-Version verwendest du? Wenn es tatsächlich 6.5 oder so ist, dann kann es gar nicht auf Windows 7 ausgelegt sein, weil es Windows 7 damals noch nicht gab. Es ist also nicht erstaunlich, wenn dann Probleme auftreten.

Ich habe das gerade bei mir (Windows Vista, 2GB Speicher, 2009a / 7.8 ) ausprobiert, und ich kann Jans Bug nicht reproduzieren.

Es empfiehlt sich so oder so der Umstieg auf eine neuere MATLAB-Version, damit du die Vorteile deines 64-bit - Betriebssystems nutzen kannst.

Um bei deiner Studienarbeit voranzukommen, könntest du zunächst nur einen Farbkanal analysieren und sicherstellen, dass damit alles klappt. Die verbleibenden Kanäle kannst du ja dann genauso analysieren.

Was hält dich im übrigen davon ab, es mit dem (anscheinend auch bei dir funktionierenden)
Code:
z = false(11265, 17472, 3);

umzusetzen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
PieceX
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 11.11.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.01.2011, 12:19     Titel:
  Antworten mit Zitat      
Tag, Harald!

Zitat:
welche MATLAB-Version verwendest du?


Meine Versionsangabe aus dem ersten Post mußt Du wohl überlesen haben.
Zitat:
Matlab (7.04.365 SP2)



Zitat:

Was hält dich im übrigen davon ab, es mit dem (anscheinend auch bei dir funktionierenden)
Code:

z = false(11265, 17472, 3);
 

umzusetzen?


Mich hält nichts davon ab, die funktionierende Variante zu verwenden (ich verwende sie bereits). Jedoch um zukünftige Fehler dieser Art zu vermeiden bin ich doch (natürlich auch für die Mitleser, bei denen ein ähnliches Problem vorliegt) bemüht, dem Fehler auf den Grund zu gehen.

Zitat:

Es empfiehlt sich so oder so der Umstieg auf eine neuere MATLAB-Version, damit du die Vorteile deines 64-bit - Betriebssystems nutzen kannst.

Was die aktuellere Matlab-Version angeht: Sie wird nicht gerade verschenkt, weshalb ich mich mit der geliehenen, alten Version begnügen muss.
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: 08.01.2011, 12:39     Titel:
  Antworten mit Zitat      
Hallo,

die Versionsangabe am Anfang hatte ich tatsächlich überlesen bzw. fehlinterpretiert.
Da du ja jetzt einen Workaround für das Problem kennst, sollte es dich zumindest nicht mehr bei deiner Arbeit behindern, wie du zuvor angedeutet hast.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.