|
|
Dos and Donts oder: Performance |
|
divB |

Forum-Anfänger
|
 |
Beiträge: 38
|
 |
|
 |
Anmeldedatum: 23.10.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.10.2009, 12:41
Titel: Dos and Donts oder: Performance
|
 |
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:
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
|
|
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 23.10.2009, 18:00
Titel:
|
 |
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
|
|
|
Gast |
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.10.2009, 18:12
Titel:
|
 |
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
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
|
 |
Beiträge: 24.500
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.10.2009, 18:13
Titel:
|
 |
Hallo,
ist im wesentlichen dasselbe wie
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
|
|
|
Andreas Goser |

Forum-Meister
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 26.10.2009, 11:09
Titel:
|
 |
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
|
|
|
|
|
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 - 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.
|
|