|
Romaxx |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.05.2015, 14:30
Titel: Speed up Code- Beispiele
|
 |
Hallo zusammen,
ich habe eine Frage zu zwei Code-Beispielen, welche unterschiedlich schnell laufen. Es handelt sich dabei um eine while-Schleife in der eine if Bedingung und eine Funktion sind. Der Geschwindigkeitsunterschied liegt so bei Faktor 10, mehr oder weniger.
Erste Variante ist langsamer.
Woran könnte das liegen?
Das ist natürlich nur rudimentär abgebildet.
Eventuell folgt der richtige Code, dann aber per PM. (ist auch etwas länger)
Ersteres:
Zweites
|
|
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 21.05.2015, 15:47
Titel:
|
 |
könnte mir vorstellen das das übergeben der 240mb großen variablen länger dauert als das übergeben eines teils. um zu gucken wo etwas wie lange dauert bietet sich der profiler an.
_________________
richtig Fragen
|
|
|
Romaxx |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.05.2015, 16:10
Titel:
|
 |
Hallo Winkow,
ich überlege es mir noch einmal und führe noch ein paar Tests durch.
Ich hatte zu Beginn dieselbe Vermutung, hab daher noch etwas am Script gemacht, um zu schauen, ob das wirklich daran liegt. Hab es aber irgendwie ausschließen können.
Vielleicht habe ich auch etwas vergessen, ich teste noch einmal und freue mich trotzdem noch auf den ein oder anderen Ratgeber und melde mich dann zurück .
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 21.05.2015, 16:33
Titel: Re: Speed up Code- Beispiele
|
 |
|
 |
|
Hallo Romaxx,
Matlab benutzt ein Konzept, bei dem die kopierte Variablen zunächst nur als "SharedDataCopy" erzeugt werden und eine "DeepCopy" erst beim Ändern der Daten stattfindet: "CopyOnWrite".
In der Zeile "alpha = NORMA_MTHD(alpha,k,others);" wird also zunächst für die Unterfunktion das Array "alpha" so kopiert, dass nur ein neuer Header erzeugt wird, das große Array mit den Werten aber bei behalten wird. Es zeigent dann praktisch zwei Variablen auf den selben Speicherblock im RAM.
Wenn nun in der Unterfunktion Werte dieses Array erzeugt werden, wird das gesamte Array dupliziert und die Änderungen eingefügt. Das ist sehr zeitaufwändig, gerade wenn der Speicher größer ist als der Prozessor- oder 1st-Level-Cache und ins langsame RAM geschrieben werden muss.
Anders ist das bei "alpha(:,k) = NORMA(alpha(:,k - 1),others)". Hier bekommt die Unterfunktion nur einen kleinen Teil des großen "alpha"-Arrays als Kopie und die dort erzeugten Änderungen werden in die Original-Matrix hineinkopiert.
Während man also im ersten Falle in jeder Iteration das gesamte alpha-Array dupliziert, werden im zweiten Fall nur jeweils eine Spalte kopiert und die Änderungen wieder zurückgeschrieben. Einzelne Spalten passen aber eher in den Prozessor-Cache, so dass der Speicher "alpha(:,k)" wahrscheinlich noch dort verfügbar ist, wenn in der nächsten Iteration auf "alpha(:,k-1)" zugegriffen wird.
Du hast also eine ausgesprochen gute Frage gestellt, bei der man eine Menge über effizientes Programmieren lernen kann. Schnelle Programme lassen sich nur schreiben, wenn man die gesamte Architektur des Rechners berücksichtig.
Gruß, Jan
|
|
|
|
|
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.
|
|