|
|
Programmcode beschleunigen |
|
jay-jey |
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 03.12.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.03.2011, 09:13
Titel: Programmcode beschleunigen
|
|
Hallo,
ich hab ein Problem. Mein Vorgänger hier am Lehrstuhl hat nen Programm geschrieben um Emuslionen zu vermessen. Das Programm funktioniert auch, nur leider braucht es pro Bild 40min. Die Bilder sind 2048x1536 Pixel groß. Ich habe auch mal gelesen, dass der Matlab code ziemlich langsam sein soll und das man den Code auch umwandeln kann in C oder C++. Das habe ich auch schon versucht, ohne Erfolg. Liegt ja -wie ich jetzt schon rausbekommen habe -daran, dass es nicht wirklich ein C code ist, sondern immer noch auf Matlab zugreift. Könnt mir vielleicht jemand mal erklären wie man es "richtig" macht und hätte das überhaupt einen Sinn?.
Denn Befehl den benutzt hab um ne exe datei zu erzeugen war: mcc -m
|
|
|
|
|
eupho |
Forum-Meister
|
|
Beiträge: 777
|
|
|
|
Anmeldedatum: 07.01.09
|
|
|
|
Wohnort: Marburg
|
|
|
|
Version: R2009b
|
|
|
|
|
|
Verfasst am: 25.03.2011, 10:06
Titel:
|
|
Vielleicht solltest du dir den Code mal anschauen und dort direkt was verbessern, meistens lässt sich enorm Rechenzeit sparen.
Verwende hierzu am besten den Profiler von MATLAB (siehe Hilfe-Datei).
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 25.03.2011, 10:09
Titel:
|
|
Hallo,
C-Code erzeugen aus MATLAB-Code ginge mit EMLC, unterstützt also nur das Embedded MATLAB Subset.
Sinnvoller wäre meines Erachtens, sich den Code mal vorzunehmen und zu sehen, was man verbessern kann:
1. Profiler verwenden, um die langsamsten Programmteile zu identifizieren.
2. Sicherstellen, dass alle dynamisch wachsenden Arrays vorbelegt sind.
3. Wo möglich: vektorisieren.
Je nachdem, wie effizient der ursprüngliche Code geschrieben ist, kann man da sehr viel rausholen... und mit Verlaub: wenn der Code 40 Min. für ein Bild braucht, fürchte ich, dass er nicht sehr effizient geschrieben ist.
Eine andere Möglichkeit wäre natürlich Parallel Computing, um den Code zu beschleunigen.
Grüße,
Harald
|
|
|
jay-jey |
Themenstarter
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 03.12.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.03.2011, 12:31
Titel:
|
|
Hi,
also den Profiler kannte ich noch gar nicht. Danke erstmal. Hab jetzt mal den Code Analysiert. Die meiste Zeit geht für den Befehl "bwulterode" drauf, hab das Ergebnis auch mal als Bild angehängt. Hat jemand ne Idee wie ich diesen Schritt beschleunigen kann?
Was genau sagt mir eigentlich die SelfTime im Profiler?
mfg
@Harald: Was meinst du genau mit Parallel Computing. Also das ganze läuft schon auf 4 Prozessoren (Core i5 5 mit 3GHz) oder gibt es noch eine Einstellung die ich noch nicht gefunden hab.
Matlab Version 2010b.
Beschreibung: |
|
Download |
Dateiname: |
Matlab-Profiler.jpg |
Dateigröße: |
95.85 KB |
Heruntergeladen: |
763 mal |
|
|
|
Andreas Goser |
Forum-Meister
|
|
Beiträge: 3.654
|
|
|
|
Anmeldedatum: 04.12.08
|
|
|
|
Wohnort: Ismaning
|
|
|
|
Version: 1.0
|
|
|
|
|
|
Verfasst am: 25.03.2011, 13:02
Titel:
|
|
Ich hoffe der Vorgänger hat eine Dokumentation zur Auswahl der Optionen bei BWULTERODE hinterlassen. Mit den Parameter 'method' und 'conn' zu experimentiern bringt möglicherweise sehr viel Performance, aber vielleicht is es einfach nötig? Aber es lohnt sich auf jesen Fall.
IMREGIONALMAX dürfte kein Beschleunigungspotential haben.
Andreas
|
|
|
jay-jey |
Themenstarter
Forum-Newbie
|
|
Beiträge: 6
|
|
|
|
Anmeldedatum: 03.12.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.04.2011, 14:42
Titel:
|
|
Hi,
so hab es jetzt geschafft den Teil mit "bwulterode" umzuschreiben leider hab noch ein viel größerers Problem mit "filter2" hab in der Help datei irgendwas von conv2 gelesen, aber ich versteh es nicht so ganz. Bei kleinen Werten so um 10 -20 herum geht es noch ziemlich schnell, aber ich suche die Partikel in einem Bereich von 5 bis 250 Pixeln.
Hat jemand ne Idee wie man den Befehl "filter2" ersetzten kann.
Der betreffende Abschnitt im Code sieht so aus
|
|
|
|
|
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.
|
|