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

Dos and Donts oder: Performance

 

divB
Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 23.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2009, 12:41     Titel: Dos and Donts oder: Performance
  Antworten mit Zitat      
Hi,

Ich habe einen alten Code uebernommen der saulangsam war. Alles war "low-level" programmiert ueber schleifen. Ich habe nun ein komplettes Rewrite gemacht und alles ueber Matrixoperationen geregelt. Leider ist die Funktion noch immer grottenlangsam...70 Sekunden fuer ein 128x128 Byte Array. Zu langsam.

Hauptproblem ist sicher die Hauptschleife durch die leider einige tausende Male iteriert werden muss.

Der Inhalt der Hauptschleife ist:

Code:

    res = (circshift(dx, [-1,0]) - dx) - (circshift(dy, [0, -1]) - dy);
    res(:,end) = 0;
    res(end,:) = 0;
   
    dx = dx + (-circshift(res, [1 0]) + res)/4;
    dy = dy + (circshift(res, [0 1]) - res)/4;
   
    resmax = max(res(:));
    resmin = min(res(:));
 


Ein Schleifendurchgang benoetigt im Schnitt im Schnitt zwar nur wenige ms, aber die Masse machts.

Gibt es an obigen Code vielleicht nochwas zu optimieren? Ist die Verwendung von circshift vielleicht nicht so optimal?

LG,
divB
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: 23.10.2009, 18:00     Titel:
  Antworten mit Zitat      
Was sagt den der Profiler wo die meiste Zeit bleibt? Die hier eingesetzten Algorithmen sind alle recht "alt" - d.h. gewiss zeitoptimiert.

Ein ausfühbares Beispiel wird gewiss helfen beim Helfen.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2009, 18:12     Titel:
  Antworten mit Zitat      
Ad "die hier eingesetzten Algorithmen"...was meinst du damit?

Habe derzeit leider keinen Zugriff mehr auf die Quelldateien. Ich kann aber einmal so viel sagen: Die Funktion besteht aus einem Kopf (nicht mehr als eine Gradientenberechnung) und einem Fuss (nicht mehr als ein Integral). Die brauchen wenige Millisekunden.

Dazwischen liegt nur mehr die Hauptschleife à la

Code:

while resmax - resmin > thres
    % Code von oben
end
 


Das wars eigentlich schon. Direkt mit dem Profiler hab ichs nicht versucht sondern nur mit tic/toc. Das sind leider so um die 15000 Iterationen und ein Schleifendurchlauf scheint zwischen weniger ms und max. 30ms zu brauchen.

Also wirklich auffällig langsames findet sich in meinem Code nicht?

LG,
divB
 
Harald
Forum-Meister

Forum-Meister


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

Code:
circshift(dx, [-1,0]) - dx

ist im wesentlichen dasselbe wie
Code:

Eine Zeile fehlt, aber die wird im nächsten Schritt sowieso auf 0 gesetzt.

Mit etwas Geschick sollte man alle diese Aufrufe von circshift durch Aufrufe von diff ersetzen können. Ich weiss nicht, was da eigentlich gemacht werden soll, aber es sieht mir nach einer zweiten Ableitung aus... und dann könnte man auch überlegen, gradient zu verwenden... oder diff, mit Argument 2

Grüße,
Harald
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: 26.10.2009, 11:09     Titel:
  Antworten mit Zitat      
Mit den eingesetzten Algorithmen meinte ich die Umsetzungen in MATLAB. Die Basis-Operationen sind z.T. schon über 30 Jahre alt und somit ist es höchst unwahrscheinlich, dass sie langsam implementiert sind. Bei einem neuen Produkt, oder einem Algorithmus des State-of-the-Art ist, kann es sein, dass noch Optimierungsbedarf besteht.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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 - 2025 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.