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

Programmcode beschleunigen

 

jay-jey
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 03.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2011, 09:13     Titel: Programmcode beschleunigen
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen


eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 25.03.2011, 10:06     Titel:
  Antworten mit Zitat      
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).
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.03.2011, 10:09     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
jay-jey
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 03.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2011, 12:31     Titel:
  Antworten mit Zitat      
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.

Matlab-Profiler.jpg
 Beschreibung:

Download
 Dateiname:  Matlab-Profiler.jpg
 Dateigröße:  95.85 KB
 Heruntergeladen:  763 mal
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: 25.03.2011, 13:02     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
jay-jey
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 03.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2011, 14:42     Titel:
  Antworten mit Zitat      
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
Code:
%
minR=5
maxR=250
for i=minR:maxR
    aktuell=filter2(Rmap==i,im_kont)/sum(sum(Rmap==i));
    akk(:,:,i-minR+1)=aktuell;
%     akksize=size(akk)
    maxima(i-minR+1)=max(aktuell(:));
%      maxii=size(maxima)
   
end
 
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.