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

H5read: Unterschiedliche Lesezeiten

 

Grünschnabel
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 26.10.2013, 11:58     Titel: H5read: Unterschiedliche Lesezeiten
  Antworten mit Zitat      
Hallo Zusammen,
vielleicht könntet Ihr mir bei folgendem Problem helfen.

Mit Hilfe eines Codes möchte ich zwei unterschiedliche Bereichen eines HDF-Files in Matlab laden. Die Teilbereiche werden separat eingelesen und im Anschluss zu einer großen Matrix zusammen gesetzt. Dieser Vorgang funktioniert ohne Fehler. Die verwendeten *.h5 Files sind sehr groß (zwischen 1 und 3 GB)!

Ich nutze dazu die Funktion h5read und verwende folgenden Code:

Code:

clear all;
clc;

    A = h5read (HDF5_File, Bereich_1,[1 1], [1000 3000] );
    B = h5read (HDF5_File, Bereich_2,[2000 1], [1500 3000] );
    Gesamtmatrix= vertcat (A,B);  
 


Meine Frage:
Warum bekomme ich immer so unterschiedliche "Zeiten für das Einlesen" meiner *.h5 Datei? Kann ich hier irgendetwas verbessern? Muss ich das Dokument am Ende wieder schließen (wie z.B. fclose)

Hier mal kurz aufgeführt, wie stark die Zeiten variieren:
1. Durchlauf meines Codes 70 Sekunden (Direkt nach dem Öffnen von Matlab)
2. bis 10. Durchlauf: - ca. 1 - 3 Sekunden
11. Durchlauf: 30 Sekunden
12. Durchlauf: 40 Sekunden
13. Durchlauf: 1 Sekunde

Kann mir jemand helfen?!?

Vielen Dank im Voraus.
Der Grünschnabel Rolling Eyes
Private Nachricht senden Benutzer-Profile anzeigen


Kascho
Forum-Century

Forum-Century


Beiträge: 195
Anmeldedatum: 24.03.10
Wohnort: Jena
Version: R2008b ... :(
     Beitrag Verfasst am: 26.10.2013, 12:48     Titel:
  Antworten mit Zitat      
Hallo Grünschnabel,

ich kenne mich mit hdf Files nicht aus. Aber ein Problem könnte das
Code:


am Anfang sein. Das löscht alle Funktionen aus dem Speicher und hat noch andere unschöne Effekte.

Gruß, Kascho
Private Nachricht senden Benutzer-Profile anzeigen
 
Grünschnabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 26.10.2013, 13:00     Titel:
  Antworten mit Zitat      
Hallo Kascho,
vielen Dank für Deine schnelle Antwort.
Was meinst du genau mit unschönen Effekten?

Meine erten vier Zeilen in meinem Code sehen wie folgt aus:
Code:

clear all;
close all;
clc;
tic              %Startet die Zeitnahme
.
.
.
 


Mit den Zeilen möchte ich eigentlich erreichen, dass mein belegter Speicher im workspace gelöscht wird um somit eine saubere "Arbeitsgrundlage" für neue Rechendurchläufe zu schaffen.
Ist das nicht richtig?!? Wie geht ihr vor?!?
Hat vielleicht noch jemand eine Idee zu meinem Problem?

Vielen Dank im Voraus,
der Grünschnabel
Private Nachricht senden Benutzer-Profile anzeigen
 
Kascho
Forum-Century

Forum-Century


Beiträge: 195
Anmeldedatum: 24.03.10
Wohnort: Jena
Version: R2008b ... :(
     Beitrag Verfasst am: 26.10.2013, 13:29     Titel:
  Antworten mit Zitat      
Es löscht unter anderem auch alle breakpoints. einfach mal in
Code:

nachlesen.

Ich nehme meistens entweder nur clear. Oder

Code:


Das hat den Vorteil, dass man hier mit "-except" einzelne Variablen behalten kann.

Gruß, Kascho.
Private Nachricht senden Benutzer-Profile anzeigen
 
Grünschnabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 26.10.2013, 13:35     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antwort, ich werde gleich mal nachlesen.

Aber gibt es vielleicht noch irgendwelche Hinweise oder Kommentare zum h5read Befehl?
Mache ich da was falsch?!?
Private Nachricht senden Benutzer-Profile anzeigen
 
Grünschnabel
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 01.10.13
Wohnort: ---
Version: MATLAB R2013a
     Beitrag Verfasst am: 27.10.2013, 07:22     Titel:
  Antworten mit Zitat      
Hallo lieber User,
hat keiner eine Idee zu meinen unterschiedlichen Zeiten die ich für das Einlesen eines HDF-Files benötige?!?

Ich habe überlegt, ob es vielleicht daran liegen könnte, dass ich zwei Bereiche mit h5read einlese und diese später mit vertcat zusammen setze.

Code:
   
A = h5read (HDF5_File, Bereich_1,[1 1], [1000 3000] );
B = h5read (HDF5_File, Bereich_2,[2000 1], [1500 3000] );
Gesamtmatrix= vertcat (A,B);  
 


Ich habe einfach mal die ganze Matrix mit h5read eingelesen und auch hier erhalte ich unterschiedliche Zeiten für das Einlesen.

Hmm...
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: 27.10.2013, 13:01     Titel: Re: H5read: Unterschiedliche Lesezeiten
  Antworten mit Zitat      
Hallo Grünschnabel,

Wie Kascho schon schrieb, ist "clear all" eine schlechte Idee: Es löscht alle funktionen aus dem Speicher und das erneute Laden von Der Festplatte benötigt "viel" Zeit. Allerdings heißt "viel" hier etwas von der Größenordnung 1 Sekunde. Mit den 40 Sekunden kann das nicht viel zu tun haben.

Aber wie kommst Du darauf, die Funktion mit dem brutalen Löschen aller Informationen zu starten? Das ist sehr weit verbreiten, und dennoch ist gerade das Löschen aller Breakpoints eine sehr unpraktische Behinderung beim Debuggen. Und da sowohl Programmier-Anfänger als auch -Profis immer mit Bugs kämpfen, ist alles, was das Debuggen behindert immer übel.

Zu gerne würde ich wissen, woher die Mode mit dem "clear all" kommt.

Es kann sehr unterschiedliche Gründe für die Unterschiedlichen Laufzeiten geben. Dass der erste Lauf besonders lange dauert, kann z.B. am Virus-Scanner liegen, der jedes neu geöffnete File erstmal untersucht (testweise diese Files mal auf die White-List setzen), oder am Festplatten-Cache, der die zuletzt benutzten Daten in einem RAM-Cache hält. Der ist zwar üblicherweise keine 3 GB groß, es ist aber trotzdem eine spürbare Beschleunigung.

Das Lesen eines 3 GB-Files kann unterbrochen werden von andern Aktionen auf der Festplatte, Defragmentierer, Prefetch-Caching, Virus-Scanner, Mail-Download, Updates des Betriebssystems...
Hier nur den Matlab-Prozess zu betrachten, bringt keine sinnvolle Einsichten.

Das nächste Problem kann das VERTCAT sein: Wenn Du zwei große Arrays erstellst, müssen diese im RAM abgelegt werden. Für das Zusammengefügte Array muss dann wieder ein neuer großer fortlaufender Bereich im RAM resveriert werden. Wenn dazu zuerst der Speicher aufgeräumt werden muss, braucht das viel Zeit.

Jede Datei, die mit FOPEN geöffnet wurde, sollte unbedingt wieder mit FCLOSE geschlossen werden. H5READ erledigt das aber bereits.

Der Profiler hilft herauszufinden, an welchen Punkten die unterschiedlichen Laufzeiten auftreten. Fragen zur Laufzeit sollten unbedingt per PROFILE untersucht werden.

Gruß, Jan

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
.





 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.