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

Zeitmessung; Werden Toolboxen Matlab-intern initialisiert?

 

nicoh
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 26.04.13
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 12.06.2013, 14:26     Titel: Zeitmessung; Werden Toolboxen Matlab-intern initialisiert?
  Antworten mit Zitat      
Hallo zusammen,

ich muss für meine Arbeit ein Matlabskript zeitkritisch untersuchen. Dabei ist mir aufgefallen, dass Matlab viel Zeit für die Initialisierung benötigt, wenn man mit der "Symbolic Math Toolbox" arbeitet.
Es handelt sich dabei um folgenden Codeabschnitt:
Code:

if debug >= 3
    zeitGesamt = tic;
    zeitSymInit = tic;
end
% Symbole initialisieren
syms ki kp clear
syms a q s y clear

% Gloabel Variablen initialisieren
bedingungkpki = {};
bedingungkp = {};
bedingungki = {};
bedingungDetkpki = {};
bedingungDetkp = {};
bedingungDetki = {};
grenzenki = {};
grenzenkp = {};
linie(1:75)= '+';

%Zeitmessung
if debug >= 3
    zeitSymInit = toc(zeitSymInit);
end
 


Nun ist mir aufgefallen, dass wenn vor jeder Ausführung ein "clear all" ausgeführt wird, die Initialisierung ca. 2,5s dauert. Wenn ich nun allerdings das Skript mehrmals hintereinander ausführe, braucht es bedeutend weniger Zeit.
Meine Theorie ist nun, dass nach einem "clear all" die "Symbolic Math Toolbox" noch einmal neu initialisert werden muss, allerdings finde ich dafür keinen Beweis, den ich ja für meine Arbeit benötigen würde.
Daher wollte ich mal euch fragen, ob ihr mir da vielleicht weiterhelfen könnt!

Vielen Dank schon einmal im Voraus!

Viele Grüße!

(Hoffe ich bin im richtigen Forum, schwer zu zuordnen...)
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: 12.06.2013, 15:10     Titel:
  Antworten mit Zitat      
Hallo,

aus der Doku:
Zitat:
Removes all variables from the base workspace, and all compiled scripts, functions, and MEX-functions from memory.


Ich halte es daher auch nicht für sinnvoll, vor allem immer 'clear all' zu schreiben.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 26.04.13
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 12.06.2013, 15:45     Titel:
  Antworten mit Zitat      
Erst einmal vielen Dank für die Antwort!

Der Gedanke bei der Zeitmessung war, dass diese so aufgezeichnet werden soll, als ob MATLAB immer wieder neugestartet wurde, daher kam der Gedanke, dass ich das mit "clear all" für mich vereinfachen kann.

Grüße!
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 12.06.2013, 16:09     Titel:
  Antworten mit Zitat      
2 Anmerkungen:

Ich kann mir gut vorstellen, dass bei der Symbolic Math Toolbox die ganze Mupad Engine geladen werden muss und das (einmal) etwas kostet. Bei den meisten anderen Toolboxen dürfte das nicht der Fall sein, weil "in M geschrieben.

Die "If debug" Syntax lässt mich befürchten, dass der "Profiler" nicht bekannt ist.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
nicoh
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 26.04.13
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 12.06.2013, 16:14     Titel:
  Antworten mit Zitat      
Andreas Goser hat Folgendes geschrieben:

Ich kann mir gut vorstellen, dass bei der Symbolic Math Toolbox die ganze Mupad Engine geladen werden muss und das (einmal) etwas kostet. Bei den meisten anderen Toolboxen dürfte das nicht der Fall sein, weil "in M geschrieben.
Andreas


Gibts dafür denn auch iwo etwas schriftliches von Mathworks, sodass ich mich auch darauf beziehen kann?

Andreas Goser hat Folgendes geschrieben:

Die "If debug" Syntax lässt mich befürchten, dass der "Profiler" nicht bekannt ist.


Ne ist mir nicht bekannt. Allerdings will ich den Code auch ungerne umschreiben, da mir nicht mehr soo viel Zeit bleibt Wink


Grüße!
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: 12.06.2013, 18:22     Titel:
  Antworten mit Zitat      
Hallo,

um den Profiler zu verwenden, musst du gar nichts umschreiben.

Wenn du die Laufzeit eines Skripts überprüfen willst:
"Run and Time" - Button im Editor-Tab

Wenn du die Laufzeit einer Funktion überprüfen willst:
"Run and Time" - Button im Home-Tab.
Aufruf der Funktion in der oberen Leiste so eingeben, wie du das im Command Window machen würdest.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 13.06.2013, 07:15     Titel:
  Antworten mit Zitat      
Was Schriftliches von MathWorks kriegt man wenn man sich an MathWorks wendet Smile Also technische Informationen gibt es immer, wenn irgendmöglich.

Hier scheint es sich ("ich muss für...machen" "keine Zeit") um eine universitäre Arbeit zu handeln, deren Hintergrund vielleicht gar nicht so bekannt ist. Bitte einfach den Betreuer informieren, dass er sich gerne an den Technischen Support von MathWorks wenden kann.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
nicoh
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 26.04.13
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 13.06.2013, 09:43     Titel:
  Antworten mit Zitat      
Zitat:
um den Profiler zu verwenden, musst du gar nichts umschreiben.

Ist es dabei denn auch möglich, dass man mehrere Codeabschnitte differenziert?

Zitat:
Was Schriftliches von MathWorks kriegt man wenn man sich an MathWorks wendet Smile Also technische Informationen gibt es immer, wenn irgendmöglich.


Ich dachte, dass mir das Forum vielleicht schon einen Tipp geben kann, wo man suchen kann oder ob es Dokumente gibt, in denen so etwas beschrieben ist. Wink Aber dann werde ich mich mal an MathWorks wenden.
Ja es handelt sich um eine universitäre Arbeit. Wink

Vielen Dank trotzdem an dieser Stelle für eure Antworten!
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: 13.06.2013, 10:55     Titel: Re: Zeitmessung; Werden Toolboxen Matlab-intern initialisier
  Antworten mit Zitat      
Hallo nicoh,

Ich schreibe hier immer wieder gerne über "clear all" - mein Rekord waren 4 entsprechende Nachrichten an einem Tag.
"clear all" löscht alle geladenen Funktionen aus dem RAM, und beim nächsten Aufruf müssen sie zeitaufwändig von der Platte nachgeladen werden. Zudem werden dabei alle persistenten Varioablen gelöscht, so dass eine Neu-Initialisierung der Funktionen, z.B. IMREAD noch einmal Zeit benötigt.
Und weiterhin werden noch alle Breakpoints gelöscht, was das Debuggen enorm behindert.

Deswegen rate ich von dem brutalen Löschen per "clear all" immer wieder und ausdrücklich ab. Gerade Programmieranfänger setzen dies aber inflationär ein und man findet sehr viele Programme im FileExchange, die dies enthalten. Gestern gab es sogar eine Veröffentlichung dort, bei der jede Unterfunktion mit "clc; clear all" begann. Sehr schrill. Wer empfiehlt soetwas nur?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 26.04.13
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 13.06.2013, 12:26     Titel: Re: Zeitmessung; Werden Toolboxen Matlab-intern initialisier
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:

"clear all" löscht alle geladenen Funktionen aus dem RAM, und beim nächsten Aufruf müssen sie zeitaufwändig von der Platte nachgeladen werden.


Aber ist es dann nicht genau das, was ich haben möchte? Es soll ja jedes mal simuliert werden, dass Matlab neugestartet wurde. Das würde ich ja dann mit einem "clear all" erreichen, oder?

Zur Beruhigung: Es ist nicht im Skript selber eingebaut, wurde nur für diese "Simulation" davor geschoben Wink

Grüße!
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: 13.06.2013, 14:15     Titel: Re: Zeitmessung; Werden Toolboxen Matlab-intern initialisier
  Antworten mit Zitat      
Hallo nicoh,

Wenn Du wirklich Matlab in einen reproduzierbaren "start-frischen" Zustand versetzen möchtest, hilft nur ein Neustart von Matlab:
Code:
system('matlab -r YourTestFunction &')
quit

Aber selbst dann wird die Messung nicht fair, denn sowohl das Betriebssystem als auch die Festplatte könnten den Inhalt der M-Files von Toolbox-Funktionen im Cache haben. Wenn die Laufzeiten für den reinen Startup von Matlab ausschlaggebend ist, misst Du nicht die Performance des Programms sondern eventuell die Größe und den Füllstand des Festplatten-Caches!

Deshalb ist es üblich für Messungen der Performance eines Matlab Programms dieses zuerst "warm laufen" zu lassen und erst danach die Laufzeit für einige Durchgänge zu messen und zu mitteln. Ein einfaches "mean(1:2)" kann z.B. schon mal eine Sekunde benötigen, wenn mean.m zuerst von der Platte gelesen werden muss, das Betriebssystem aber gerade die Defragmentierung und den Viren-Scanner startet, während gleichzeitig Windows neue Updates installiert.

Deswegen halte ich "clear all" und auch einen Neustart von Matlab für unproduktiv, wenn es um die Messung der Performance eines Programms geht.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 26.04.13
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 13.06.2013, 15:27     Titel:
  Antworten mit Zitat      
das ist gut zuwissen! Dann werde ich wohl den Test noch einmal durchführen mit warmgelaufenem MATLAB!

Vielen Dank für eure Antworten!
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 - 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.