|
|
Zeitmessung; Werden Toolboxen Matlab-intern initialisiert? |
|
nicoh |
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 26.04.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2015b
|
|
|
|
|
|
Verfasst am: 12.06.2013, 14:26
Titel: Zeitmessung; Werden Toolboxen Matlab-intern initialisiert?
|
|
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:
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...)
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.06.2013, 15:10
Titel:
|
|
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
|
|
|
nicoh |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 26.04.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2015b
|
|
|
|
|
|
Verfasst am: 12.06.2013, 15:45
Titel:
|
|
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!
|
|
|
Andreas Goser |
Forum-Meister
|
|
Beiträge: 3.654
|
|
|
|
Anmeldedatum: 04.12.08
|
|
|
|
Wohnort: Ismaning
|
|
|
|
Version: 1.0
|
|
|
|
|
|
Verfasst am: 12.06.2013, 16:09
Titel:
|
|
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
|
|
|
nicoh |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 26.04.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2015b
|
|
|
|
|
|
Verfasst am: 12.06.2013, 16:14
Titel:
|
|
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
Grüße!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.06.2013, 18:22
Titel:
|
|
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
|
|
|
Andreas Goser |
Forum-Meister
|
|
Beiträge: 3.654
|
|
|
|
Anmeldedatum: 04.12.08
|
|
|
|
Wohnort: Ismaning
|
|
|
|
Version: 1.0
|
|
|
|
|
|
Verfasst am: 13.06.2013, 07:15
Titel:
|
|
Was Schriftliches von MathWorks kriegt man wenn man sich an MathWorks wendet 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
|
|
|
nicoh |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 26.04.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2015b
|
|
|
|
|
|
Verfasst am: 13.06.2013, 09:43
Titel:
|
|
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. Aber dann werde ich mich mal an MathWorks wenden.
Ja es handelt sich um eine universitäre Arbeit.
Vielen Dank trotzdem an dieser Stelle für eure Antworten!
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 13.06.2013, 10:55
Titel: Re: Zeitmessung; Werden Toolboxen Matlab-intern initialisier
|
|
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
|
|
|
nicoh |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 26.04.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2015b
|
|
|
|
|
|
Verfasst am: 13.06.2013, 12:26
Titel: Re: Zeitmessung; Werden Toolboxen Matlab-intern initialisier
|
|
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
Grüße!
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 13.06.2013, 14:15
Titel: Re: Zeitmessung; Werden Toolboxen Matlab-intern initialisier
|
|
|
|
|
Hallo nicoh,
Wenn Du wirklich Matlab in einen reproduzierbaren "start-frischen" Zustand versetzen möchtest, hilft nur ein Neustart von Matlab:
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
|
|
|
nicoh |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 26.04.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 2015b
|
|
|
|
|
|
Verfasst am: 13.06.2013, 15:27
Titel:
|
|
das ist gut zuwissen! Dann werde ich wohl den Test noch einmal durchführen mit warmgelaufenem MATLAB!
Vielen Dank für eure Antworten!
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|