|
|
Speicher- und Laufzeitkomplexität - Call by Value |
|
Daniela |
Forum-Anfänger
|
|
Beiträge: 12
|
|
|
|
Anmeldedatum: 17.03.20
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.03.2020, 15:16
Titel: Speicher- und Laufzeitkomplexität - Call by Value
|
|
Hallo,
Matlab arbeitet ja nach dem Call by Value Prinzip.
Das heißt wenn ich nun die Speicheranalyse einer Funktion
function [x] = test(a,v) (a ist eine nxm Matrix, v und x Vektoren mit m Spalten)
durchführe arbeitet Matlab mit einer Kopie der Variablen a und v. Somit hat die Fkt. einen Speicherbedarf von O(m*n)+O(m) oder? Gilt dies auch für die Laufzeit, also führt das kopieren der Eingabevariablen auch dazu, dass ich ein Laufzeit von O(m*n)+O(m) habe?
Und wie ist es mit der Rückgabevariable x. Falls ich diese Funktion in einer anderen Funktion aufrufe, kopiert dann die zweite Funktion das x, dass sie von der Funktion x bekommen hat?
Vielen Dank
Daniela
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 20.03.2020, 16:46
Titel:
|
|
Hallo,
Kopien werden im Speicher nur dann angelegt, wenn es notwendig ist. Wenn also eine Variable in der Funktion nicht verändert wird, wird sie auch nicht kopiert (copy-on-write). Selbst wenn sie verändert wird, muss eine Kopie nicht unbedingt angelegt werden, wenn MATLAB erkennt, dass die ursprüngliche Variable nicht mehr benötigt wird (in-place optimization).
https://de.mathworks.com/help/matla.....ssary-copies-of-data.html
Du kannst eine Funktion bei geöffnetem Task Manager Schritt für Schritt im Debugger abarbeiten und die Entwicklung des Speichers verfolgen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Daniela |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 12
|
|
|
|
Anmeldedatum: 17.03.20
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.03.2020, 11:48
Titel:
|
|
Danke schonmal für Ihre Antwort, hat mir sehr weitergeholfen.
Und falls die Eingabevariable verändert wird, also kopiert wird, führt das dann auch zu zusätzlicher Laufzeit. Also falls eine nxm Matrix übergeben wird, und in der Funktion verändert wird, wird ja eine Kopie davon gemacht also ein Speicheraufwand von O(nxm). Führt die aber auch zu einer zusätzlichen Laufzeit von O(nxm) oder ist die Laufzeit dieser Kopie konstant?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 21.03.2020, 13:10
Titel:
|
|
Hallo,
meine Empfehlung wäre: ausprobieren.
Meine Erwartung wäre: asymptotisch linear.
Darf man fragen, was der Hintergrund all dieser Fragen ist?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Daniela |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 12
|
|
|
|
Anmeldedatum: 17.03.20
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.03.2020, 13:26
Titel:
|
|
Vielen Dank für deine Anwort.
Das war auch mein erster Gedanke. Da ich jedoch neu in Matlab bin muss ich mich erst mal erkunden wie man die Laufzeit direkt misst. Ich habe bis jetzt tic .. toc ausprobiert oder einzelne Teile meines Algorithmus geplottet.
Ich arbeite gerade an einem Algorithmus in Matlab und will diesen im Moment optimieren. Jedoch habe ich nicht ganz so viele Programmierkentnisse deswegen habe ich auf dieses Forum zurückgegriffen. Zugriff auf Bücher habe ich wegen der aktuellen Situation leider nicht sonst hätte ich in der Bücherei geschaut. Aber man findet Gott sei Dank viele Informationen über Matlab auch online.
Mfg. Daniela
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 21.03.2020, 14:13
Titel:
|
|
Hallo,
neben tic / toc würde ich zur Laufzeitmessung den Profiler empfehlen ("Run and Time" im HOME Tab oder profile-Befehl). Mit dem Profiler lässt sich aufschlüsseln, wo die Zeit tatsächlich verbracht wird.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Daniela |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 12
|
|
|
|
Anmeldedatum: 17.03.20
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.03.2020, 14:23
Titel:
|
|
Vielen Dank für deinen Tip, werde ich auf jeden Fall ausprobieren.
Hast du auch einen Tip was ich für den Speicheraufwand verwenden kann.
Da ich mir an einigen Stellen meines Codes nicht sicher bin ob ich Speicheraufwand habe.
Z.B.
Ich habe eine Funktion, die nach dem "In-Place" Prinzip arbeitet, d.h. die Eingabevariablen sind auch Ausgabevariablen und ich ändere (denke ich) während des Codes die Eingabevariablen nicht großartig. (also ich habe eine Matrix a und lösche die komplette erste Zeile raus, falls diese nur aus nullen besteht, und gebe die neue Matrix a dann zurück). Nun weiß ich aber nicht, ob der Befehl a(1,: ) = [] dazu führt, ob neuer Speicher angelegt wird, da die Dimension der Matrix verändert wird.
Mfg.Daniela
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 21.03.2020, 14:27
Titel:
|
|
Hallo,
wie gesagt:
Zitat: |
Du kannst eine Funktion bei geöffnetem Task Manager Schritt für Schritt im Debugger abarbeiten und die Entwicklung des Speichers verfolgen. |
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Daniela |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 12
|
|
|
|
Anmeldedatum: 17.03.20
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.03.2020, 14:32
Titel:
|
|
Vielen Dank Harald, so habe ich es bis jetzt auch immer gemacht.
(Ich dachte vllt dass es hier auch eine Funktion wie tic...toc gibt)
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 21.03.2020, 15:25
Titel:
|
|
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
|
|
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.
|
|