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

Speicherprobleme bei zweiter Festplatte

 

Lipton-Ice
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2011, 15:01     Titel: Speicherprobleme bei zweiter Festplatte
  Antworten mit Zitat      
Hallo,

da ich neu hier bin, bin ich mir auch nicht ganz sicher ob dieser Thread der richtige ist, versuche es dennoch.


Problem:
Ich glaube mein Code (in Matlab 2007b) ist etwas zu lang um ihn hier zu posten, doch ich erläutere einfach mal das Problem.
Eine for-loop am Ende des Skripts lädt ein mat-file aus einem Ordner mit ca. 300000 mat-files. In dieser Datei befindet sich eine ca. 1000x1000 Matrix im logical Format.
Anschließend wird das Format in uint8 geändert und jede 1 wird durch eine 255 ersetzt.
Diese Matrix soll dann in einem anderen Ordner der gleichen Festplatte (d: ) in ein mat-file gespeichert werden.
Dabei dauert es ca. 5 Minuten zur Speicherung einer einzigen Datei.
Wird hingegen die Datei auf Festplatte c: gespeichert geht alles RuckZuck.


Zusatz (auch wenn es eigentlich keine Rolle spielen sollte):
Das m-file, in dem das Skript gespeichert ist wurde zwischenzeitlich auf einem anderen PC mit Matlab 2011a editiert. Vorher gab es keine Probleme mit dem Skript, nun schon. Veränderungen an dem file waren jedoch nur kleinere Veränderungen, die nicht innerhalb der angesprochenen for-loop vorgenommen wurden.


Vielen Dank für eure Hilfe und Grüße,
Lipton-Ice
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 16.05.2011, 17:52 Uhr von denny
Von Matlab intern nach Sonstige MATLAB Fragen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 16.05.2011, 17:59     Titel: Re: Speicherprobleme bei zweiter Festplatte
  Antworten mit Zitat      
Lipton-Ice hat Folgendes geschrieben:
Hallo,
Zusatz (auch wenn es eigentlich keine Rolle spielen sollte):
Das m-file, in dem das Skript gespeichert ist wurde zwischenzeitlich auf einem anderen PC mit Matlab 2011a editiert. Vorher gab es keine Probleme mit dem Skript, nun schon. Veränderungen an dem file waren jedoch nur kleinere Veränderungen, die nicht innerhalb der angesprochenen for-loop vorgenommen wurden.

Welche Art von Problem meinst denn, das du oben beschrieben hast? Also meinst früher ging das Speichern schneller? Was würde denn editiert?

Ich denke nicht das es an Matlab liegt
Vielleicht ist deine Festplatte fragmentiert. Lösung die Festplatte defragmentieren
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: 16.05.2011, 19:54     Titel: Re: Speicherprobleme bei zweiter Festplatte
  Antworten mit Zitat      
Hallo Lipton-Ice,

Ein Ordner mit 300.000 File ist sehr groß. Mit welchen Datei-System ist die Platte formatiert? Welches Betriebssystem benutzt Du? Ist die Platte stark fragmentiert? Ist die Platte eventuell defekt, siehe z.B. SMART-Information? Versucht der Indexing-Dienst von Windows diesen Riesen-Ordner zu indizieren? Starten alle Dateien mit fast dem Gleichen String - dann hat Windows bei jedem erzeugten File sehr hart daran zu arbeiten den 8.3-File-Namen zu erstellen. Dann würde es helfen z.B. '12345TestFile.mat' statt 'TestFile12345.mat' als Namen zu wählen.

Es hört sich nicht so an, als habe das Problem nichts mit dem Matlab-Programm zu tun.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.05.2011, 10:35     Titel: Hypothesen, Belege aber leider keine vernünftige Lösung
  Antworten mit Zitat      
Guten Morgen,

vielen Dank für eure Antworten.

1. Die Fragmentierung liegt bei 0%
2. Format ist "NTFS"
3. Windows 7
4. Festplatte ist nicht defekt

Belege für (4):
Der Code funktioniert wunderbar, wenn ich den Pfad, wo Matlab die Datei speichern soll, von "d:\PhD\Experiment 2\Stimuli\Sample 1\BWsubx.mat (x=fortlaufende Nummer)" auf "d:\Sample 1\BWsubx.mat" verkürze.

5. An der Länge des Pfades an sich kann es aber auch nicht liegen
Beleg: Wenn ich den Code so ändere, dass die Dateien von Festplatte d:\ geladen werden und mit dem gleichen Pfad wie vorher auf c:\ gespeichert werden, klappt alles wunderbar.
Zusatz: Witzigerweise funkioniert das gleiche Verfahren umgekehrt nicht (also von c:\ alles laden und mit dem gleichen Pfad auf d:\ speichern)

6. Es kann auch nicht an der Festplatte (d:\) an sich liegen
Beleg: Wenn ich den Code so ändere, dass er mit dem gleichen langen Pfad von Festplatte c:\ lädt und auch dort speichert, dann tritt das Problem ebenfalls auf. Zusatz: Beschreibung wie bei Punkt 4 funktioniert hier ebenfalls


Schlussfolgerung: Es muss also irgendwas damit zu tun haben, dass der Ordner in dem die "neuen" Dateien gespeichert werden sollen ein Unterordner des Ordners ist, aus dem vorher die Dateien geladen werden (die liegen in "d:\PhD\Experiment 2\Stimuli")
Beleg: Laden von c:\ und speichern in einem Unterordner auf c:\ führt zum gleichen Problem.
Zusatz: Auch wenn die Länge der Pfade verkürzt wird tritt dasselbe Problem auf (Bsp.: laden von "d:\Stimuli\Dateiname"; speichern in "d:\Stimuli\Sample 1\Dateiname")


Einschränkung der Schlussfolgerung:
Existieren in dem Ordner in dem die Dateien gespeichert werden sollen bereits irgendwelche Dateien mit dem gleichen Namen, sodass sie nurnoch überschrieben werden müssen, tritt das Problem nicht auf.

Beleg: lasse ich folgenden Code laufen, werden 360 Dateien angelegt. Der Code um den es hier ursprünglich geht läuft dann einwandfrei und weißt keine Speicherverzögerungen auf.

Code:

clear all
clc
for n=1:360  
    BWsub=uint8(zeros(1,1));  
    imagepath=sprintf('e:\\PhD\\Experiment 2\\Stimuli\\Sample 1\\BWsub%d.mat', n);
    save ((imagepath),'BWsub');
   
    BWsub=uint8(ones(1,1));    
    imagepath=sprintf('e:\\PhD\\Experiment 2\\Stimuli\\Sample 1\\BWsub%d.mat', n+180);
    save((imagepath),'BWsub');    
end
 


Einschränkung des letzten Beleges:
Verkürze ich die Schleife von 360 auf 180 Iterationen läuft er ebenfalls einwandfrei. Eine anschließende Änderung (ohne Matlab neu zu starten) von 180 auf 360 produziert das gleiche Speicherproblem. Erst wenn Matlab beendet wird (funktioniert ausschließlich über den Taskmanager, anhalten des Codes mit STRG-C nicht möglich) lässt ihn wieder einwandfrei funktionieren.


Ehrlich gesagt kommt mir dieses Problem spanisch vor. Mir fällt keine wirkliche Möglichkeit mehr ein um das Problem weiter einzugrenzen. Were jetzt alles nochmal auf einen anderen PC kopieren und das gleiche dort nochmal versuchen. Aber selbst wenn es dort funktionieren sollte, sagt mir das leider nicht viel darüber wo das Problem auf meinem PC zu suchen ist bzw. wie es zu lösen ist.

Ich hoffe jemand hat noch eine Idee für mich

Vielen Dank nochmal bis hier
Grüße,
Lipton-Ice
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: 17.05.2011, 11:55     Titel: Re: Hypothesen, Belege aber leider keine vernünftige Lösun
  Antworten mit Zitat      
Hallo Lipton-Ice,

Bitte überprüfe die Festplatte mit einem Diagnose-Programm und Teste auch die Integrität des File-Systems.

Welche Matlab-Version verwendest Du?

Aus Deinem Code-Beispiel wird mir nicht klar, ob Du die erstellten Dateien zwischendruch wieder gelöscht hast. Wenn Du die Schleife von 0 bis 180 laufen läßt, werden keine Datein überschrieben. Bei 0 bis 360 wird die Hälfte der Datein aber wieder überschrieben. Macht das den Unterschied aus?

Welches Programm verbraucht die Zeit während der Verzögerungen? Matlab, der Index-Dienst, oder eine Virus-Checker?

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 16.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.05.2011, 12:51     Titel:
  Antworten mit Zitat      
Habe grad mit erschrecken feststellen müssen, dass der von mir gepostete Code eine ganz andere (als beschriebene) Konsequenz zur folge hat.

Habe den PC heruntergefahren und nach einiger Zeit neu gestartet.
Dann den geposteten Code ausgeführt mit n=1:180 (Schleifeniterationen).
Der Ordner in den die Dateien gespeichert werden sollten ist anfangs leer.
Lass ich nun den Code laufen werden zwar die Dateien dort ohne Probleme gespeichert, Matlab scheint danach jedoch noch irgendwas anderes zu tun.

Beleg: Im Workspace wird keine einzige Variable angezeigt, im Taskmanager wird die CPU-Nutzung von Matlab (und die Gesamtnutzung) mit 25% ausgewiesen (Quad-Prozessor), obwohl alle Dateien schon gespeichert sind. Kein anderer Prozess beansprucht die CPU.
Das Commandwindow enthält einen blinkenden Cursor für eine neue Eingabe und "Busy" wird NICHT angezeigt.
Gebe ich jetzt einfach etwas simples wie "p=1" ins Commandwindow ein wird "Busy" angezeigt und es dauert wieder 5 Minuten bis etwas passiert.
Ändere ich den Speicherort auf c:\ funktioniert es reibungslos.

Im Gegensatz zum ursprünglichen Problem werden aber die Dateien zumindest schonmal angelegt (auch mit einer Matrixgröße von 1000x1000).


Werde jetzt mal ein Diagnosetool drüberlaufen lassen.
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.