|
|
cputime wird in Simulink nicht richtig berechnet/ausgegeben |
|
christian_2 |
Forum-Anfänger
|
|
Beiträge: 29
|
|
|
|
Anmeldedatum: 16.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.11.2012, 08:27
Titel: cputime wird in Simulink nicht richtig berechnet/ausgegeben
|
|
|
|
|
Hallo,
ich führe mit Simulink Simulationen durch, die zum Teil viele Stunden dauern (Matlab Version 7.1.0.246 (R14), SP 3).
Jetzt wollte ich mir was dazu modellieren, was mir noch die restliche Simulationszeit in Sekunden/Minuten oder Stunden ausgibt (ich meine die reale Restzeit). Ist ja eigentlich auch nicht besonders schwer.
Gelöst habe ich das Problem mit der Matlab-Funktion cputime (siehe Anhang). Ich speichere die cpu-Zeit bei Beginn der Simulation, lese diese während der Simulation aus, um aus der Differenz die verstrichene Zeit, seit Simulationsbeginn zu ermitteln. Diese verrechne ich dann mit dem Fortschritt und so kann ich vorausberechnen, wie lange die Simulation noch dauern wird.
Theoretisch funktioniert die Geschichte, praktisch aber nicht, weil Simulink die cpu-Zeit nicht richtig ausliest.
Das kann jeder ausprobieren:
Löscht man alle hellblau hinterlegten Komponenten aus meinen Modell und gibt für den Fortschritt einfach eine Rampe vor, stellt die Simulationszeit auf 100 Sekunden, feste Schrittweite 0.0001 und lässt dann die Simulation laufen, dann stimmt die verstrichene Zeit, die cputime ausgibt.
Wenn aber im Hintergrund ein aufwändiges Simulink-Modell läuft (so, wie bei mir), dann dauert eine Sekunde cputime zwischen 2 und 4 Sekunden. Das bedeutet, cputime gibt falsche Werte aus.
Kennt jemand das Problem? Hat jemand eine Lösung oder weiß jemand, wie ich mein Modell umschreiben kann, so dass ich die verbleibende Simulationszeit ausrechnen kann?
Vielen Dank schon mal im Voraus für jede Antwort!
Viele Grüße
Christian
Beschreibung: |
|
Download |
Dateiname: |
Simulationszeit.jpg |
Dateigröße: |
82.42 KB |
Heruntergeladen: |
769 mal |
|
|
|
|
|
Andreas Goser |
Forum-Meister
|
|
Beiträge: 3.654
|
|
|
|
Anmeldedatum: 04.12.08
|
|
|
|
Wohnort: Ismaning
|
|
|
|
Version: 1.0
|
|
|
|
|
|
Verfasst am: 13.11.2012, 09:41
Titel:
|
|
Gerne biete ich Unterstützung beim Kernproblem an - der Reduktion der Rechenzeit an sich.
Zur Abschätzung der Restzeit:
Ist das grosse Realmodell fixed-step oder variable-step?
Variieren die Modelllaufzeiten viel? Und wenn ja warum? Andere Parameter -> andere Steifheit von DGLs oder warum?
Ist es wichtig, dass es bei mehreren Anwendern (== Rechnern) funktioniert?
Andreas
|
|
|
christian_2 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 29
|
|
|
|
Anmeldedatum: 16.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.11.2012, 13:21
Titel:
|
|
Hallo Andreas,
erstmal vielen Dank für Deine Antwort.
Um Deine Fragen zu beantworten:
1. Das große Realmodell ist fixed-step, mit Integrationsschrittweite von üblicherweise 0.01.
2. Die Modelllaufzeiten dürften schon variieren. Genau habe ich nicht verstanden was Du meinst. Das Simulationsprogramm simuliert 1D Fahrzeuglängsdynamik (Lkw). Die Strecken sind natürlich unterschiedlich lang. Für 300 km braucht man ca. 5 Stunden.
Es gibt beim Lkw einige Dinge (und damit Routinen), die nur zu bestimmten Zeiten gelten bzw. aufgerufen werden. Z.B. muss im Gefälle Retardereinsatz, Motorbremse, etc. berechnet werden, so dass die Simulation im Gefälle noch langsamer läuft.
Habe ich Deine Frage damit ausreichend genau beantwortet?
3. Prinzipiell sollte es schon möglich sein, dass die Anwendung auf beliebigen Rechnern läuft. Wobei Rechnerhardware, Betriebssystem, etc. gleich sein sollten. Was war der Hintergrund Deiner Frage?
Viele Grüße
Christian
|
|
|
Andreas Goser |
Forum-Meister
|
|
Beiträge: 3.654
|
|
|
|
Anmeldedatum: 04.12.08
|
|
|
|
Wohnort: Ismaning
|
|
|
|
Version: 1.0
|
|
|
|
|
|
Verfasst am: 14.11.2012, 11:28
Titel:
|
|
|
|
|
Der Hintergrund aller Fragen war welche Vereinfachungen denkbar sind. Wenn es nur auf einem Rechner läuft, könnte man ganz frech die Simulationszeit und Rechenzeit korrieren. Wenn nicht könnte man einen Benchmark hinterlegen und skalieren.
Fixed-Point ist gut, weil dann die Gesamtrechendauer wesentlich einfacher abschätzbar ist. Der Knackpunkt hier ist aber wohl, dass es Fahrsituationen gibt die wesentlich langsamer Ablaufen (vielleicht durch Enabled Subsystems).
Was ich machen würde:
Nicht noch einen Block dazupacken der in jedem Schritt etwas misst, weil es ja dann alles noch länger dauert, sondern wie Länge einer Simulation vorhersagen und beim Start einblenden. Eine kurze Simulation, die z.B. 2 min dauert auf dem Rechner laufen lassen. Bsp. 100 simulierte Sekunden, 120 echte Sekunden (auf einem anderen Rechner vielleicht 180s). Dann weiss ich bei einer Simulationszeit von 10000 s, dass es auf dem einen Rechner 12000s dauert usw. Der Fakti 1.2 wird irgendwo auf dem Pfad als Benchmark hinterlegt. Wenn die Fahrsituationen zu zu falschen Schätzungen führen: Kann man im Vorfeld wissen welche Simulation eine solche Situationen hat und die Schätzung ändern?
Andreas
|
|
|
|
|
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.
|
|