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

Rechenzeit bestimmen

 

Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.04.2013, 09:53     Titel:
  Antworten mit Zitat      
Hallo,

siehe 25.3., 18:15
Zitat:
t = toc;

Zitat:
Dann t als Blockausgang zurückgeben und die t aufsummieren.


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


cybbi
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 84
Anmeldedatum: 23.08.11
Wohnort: ---
Version: Alle
     Beitrag Verfasst am: 09.04.2013, 09:54     Titel:
  Antworten mit Zitat      
Keine schöne Lösung, aber sie funktioniert, wenn du es noch ein wenig automatisierter haben willst. Vorsicht aber, die Laufzeitmessung selbst nimmt auch einiges an Zeit weg.
Folgenden Code in den MATLAB Function Block schreiben:
Code:

coder.extrinsic('tic','toc')
persistent gesamt;
    if isempty(gesamt)
        gesamt = 0;
end
tic;
% Hier der zu messende Code
gesamt(end+1) = toc;
assignin('base','gesamt',gesamt);


Dies erzeugt dir eine Variable im Base Workspace (MATLAB Hauptworkspace). Dann mit folgendem Befehl in MATLAB einfach aufsummieren:
Code:


Ansonsten hilft nur noch der Weg von Harald, der am Anfang genannt wurde mit dem Profiler. Aber auch hier frisst die Messung natürlich einiges an Zeit.
Private Nachricht senden Benutzer-Profile anzeigen
 
ulrich
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 09.04.2013, 10:00     Titel:
  Antworten mit Zitat      
die methode finde ich sehr interessant
aber ich habe eine fehler Meldung
voran liegt das?

Code:

Index expression out of bounds. Attempted to access element 2. The valid range is 1-1.

Function 'MATLAB Function' (#51.18631.18636), line 665, column 8:
"end+1"
Launch diagnostic report.
 
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
cybbi
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 84
Anmeldedatum: 23.08.11
Wohnort: ---
Version: Alle
     Beitrag Verfasst am: 09.04.2013, 10:02     Titel:
  Antworten mit Zitat      
Ich weiß nicht woran das liegt. Vielleicht hast du es nicht vollständig und richtig implementiert? Bei mir macht das keine Schwierigkeiten. Du kannst ja auch das Modell mal hoch laden, dann kann man sich das anschauen.
Private Nachricht senden Benutzer-Profile anzeigen
 
ulrich
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 09.04.2013, 10:24     Titel:
  Antworten mit Zitat      
Es wundert mich das es bei dir funktioniert.
ich habe was unten steht geschrieben ohne code.
und ich hatte Sum= 0 erwartet aber komme immer die oben genannte fehler meldung raus.
vlt fehlt noch ein Befehl.

Code:


coder.extrinsic('tic','toc')
persistent gesamt;
if isempty(gesamt)
        gesamt = 0;
end
tic;
% Kein Code
gesamt(end+1) = toc;
assignin('base','gesamt',gesamt);

sum(gesamt)
 
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
cybbi
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 84
Anmeldedatum: 23.08.11
Wohnort: ---
Version: Alle
     Beitrag Verfasst am: 09.04.2013, 10:38     Titel:
  Antworten mit Zitat      
Du hast Recht, ich muss mich an dieser Stelle auch ein wenig korrigieren. Ich hab fälschlicherweise eine Interpreted MATLAB Function verwendet, die eine Funktion, abgelegt als m-File verwendet. Da hat das problemlos geklappt. Bei einer MATLAB Function klappt das bei mir auch nicht.
Damit bleiben auch wirklich nur noch die Vorschläge mit dem Profiler oder mit tic/toc für jeden einzelnen Simulationsdurchlauf übrig.
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: 09.04.2013, 10:45     Titel:
  Antworten mit Zitat      
... oder eben die von mir vorgeschlagene Lösung ;)

Zumindest für ein kleines Beispiel sieht es gut aus.

Grüße,
Harald

timing.mdl
 Beschreibung:

Download
 Dateiname:  timing.mdl
 Dateigröße:  36.74 KB
 Heruntergeladen:  511 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
ulrich
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 09.04.2013, 10:46     Titel:
  Antworten mit Zitat      
hab diesen Vorschlag bekommen. denkst du das es funktioniert kann?
...........................................

man addiert den wert von toc auf eine variable, die man sowohl als ein- als ausgang deklariert. Dann verbindet man die variable am ausgang in simulink mit dem eingang. Dadurch wird der Wert immer hochgezählt...
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
ulrich
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 09.04.2013, 10:59     Titel:
  Antworten mit Zitat      
Harald, dein methode sieht gut aus,
aber ich bekomme immer eine reihe von zeiten

Code:

..............................
t =
  4.3072e-005

t =
  4.4348e-005

t =
  4.4348e-005

t =
  4.4348e-005

t =
  4.4029e-005

t =
  4.4348e-005

t =
  4.3710e-005

t =
  4.4986e-005

t =
  4.4348e-005

t =
  4.4029e-005

 
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
ulrich
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 09.04.2013, 11:46     Titel:
  Antworten mit Zitat      
Es gibt bestimmt eine methode um die Zeiten zu summieren. oder?
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.04.2013, 12:31     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
aber ich bekomme immer eine reihe von zeiten

Das liegt daran, dass du keinen Strichpunkt nach t=toc gesetzt hast.

Zitat:
Es gibt bestimmt eine methode um die Zeiten zu summieren. oder?

Ja, und das ist auch in dem Modell enthalten. Das Signal, das in Scope 1 geht, ist die Summe. Der letzte Wert dieser Summe ist die gesamte Ausführungszeit des MATLAB Function Blocks. Wie von cybbi erwähnt, ist es möglich, dass durch die Zeitmessung selbst leichte Verfälschungen auftreten. Das sollte allerdings kaum eine Rolle spielen, außer die Rechenzeit für die MATLAB Function ist extrem kurz.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 09.04.2013, 13:07     Titel:
  Antworten mit Zitat      
Alles klar , kannst du mir mal bitte klar erklären wie dein Kleines Model funktioniert?
danke
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.04.2013, 13:28     Titel:
  Antworten mit Zitat      
Hallo,

der MATLAB-Block führt eine Berechnung durch, in dem Fall nur y = 2*u.

Zusätzlich wird mit tic/toc die Zeit gestoppt, die zur einmaligen Ausführung der Funktion benötigt wird.

Der Ausgang des Add-Blocks ist die Zeit, die für alle bisherigen Ausführungen zusammen benötigt wurde. Sie setzt sich zusammen aus der Zeit, die für die aktuelle Ausführung benötigt wurde (kommt vom MATLAB Function Block) sowie der Zeit für die bisherigen Ausführungen ("gemerkt" über den Memory Block).

Ich hoffe, diese Erklärung war klar genug ;)
Ansonsten bitte fragen.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 25.03.13
Wohnort: Bingen
Version: ---
     Beitrag Verfasst am: 09.04.2013, 13:44     Titel:
  Antworten mit Zitat      
Jetzt ist ganz klar Danke.

kann man sowas auch fur ein Block Modell machen?
weil ich weiss immer nicht wie ich mein MCA Block Modell messen kann.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.04.2013, 21:42     Titel:
  Antworten mit Zitat      
Hallo,

was man versuchen könnte: vor dem zu messenden Teil eien MATLAB Function Block mit tic, und danach einen mit toc und der Auswertung der Zeiten.
Das ist aber etwas gewagt, und ich würde mir auf jeden Fall die Block Sorted Order ansehen, um sicherzugehen, dass zwischen den beiden MATLAB Function Blöcken keine weiteren Blöcke ausgewertet werden.
Zur Not alles (die beiden MATLAB Functions und den zu messenden Teil) nochmal in ein Subsystem packen.

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

Gehe zu Seite Zurück  1, 2, 3  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.