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

Laufzeit einer Funktion unklar

 

Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 16.06.2013, 14:43     Titel: Laufzeit einer Funktion unklar
  Antworten mit Zitat      
Hallo,

ich übergebe an eine Funktion eine Matrix, berechne in der Funktion Zeilen und Spalten-Werte (identisch) der s-ten Zeile/Spalte und schreibe diese Werte in die s-te Zeile und Spalte rein. Dabei braucht die Funktion 99% der Zeit, um in die s-Te Zeile zu schreiben. Mir ist unklar, wieso und ich würde das gerne beschleunigen.

Für Hilfe wäre ich dankbar.

Code:
function A = AFunDummy(A, s)
% dummy code
a_is = rand(1,s);

% in Matrix schreiben
A(s,1:s) = a_is;    % in s-te Zeile schreiben --> schnell
A(1:s,s) = a_is';   % in s-te Spalte schreiben --> schnell
end


Aufruf zum Beispiel über:
Code:
n = 1000;
A = zeros(n);

for s = 1:n
    A = AFunDummy(A,s);
    disp(num2str(100*s/n));
end



Habe ich jedoch die Funktion im selben m-File, so ist auch in die Zeile schreiben sehr schnell, z.B. so:
Code:
function main
n = 1000;
A = zeros(n);

for s = 1:n
    A = AFunDummy(A,s);
    disp(num2str(100*s/n));
end

end

function A = AFunDummy(A, s)
% dummy code
a_is = rand(1,s);

% in Matrix schreiben
A(s,1:s) = a_is;    % in s-te Zeile schreiben --> schnell
A(1:s,s) = a_is';   % in s-te Spalte schreiben --> schnell
end


Das ist sicher irgendetwas Grundlegendes, dass im ersten Fall eine Kopie der Matrix A erstellt werden muss. Wenn die Kopie dann angelegt ist, ist auch das Schreiben in die Spalte schnell erledigt. Wie kann ich das umgehen?

Viele Grüße,
Nras
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.06.2013, 15:03     Titel:
  Antworten mit Zitat      
Hallo,

ich weiß nicht, welche Zeitmessungen du nun genau vergleichst.

Ich vermute jedoch, dass du bei der schnelleren Variante von In-Place Optimization profitierst:
http://blogs.mathworks.com/loren/20.....place-operations-on-data/
Die Voraussetzung wäre hier nicht, dass die Funktion in der selben Datei steht, sondern dass die Funktion von einer anderen Funktion (also nicht aus einem Skript oder vom Command Window aus) aufgerufen wird.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 16.06.2013, 15:28     Titel:
  Antworten mit Zitat      
Hallo,

die Zeiten, auf die ich mich beziehe, habe ich aus dem profiler herausgelesen.
Für In-Place Operationen sollte, wenn ich das korrekt lese, der Name der Ausgabevariable gleich dem Namen der Eingabevariablen sein. Das ist bei mir der Fall, denn beides heißt A.

Zitat:
function x = myfuncIP(x)
x = sin(2*x.^2+3*x+4);

As you can see, the two myfunc functions differ. The in-place version has a return argument with the same name as one of the input arguments, in this case, x.


Und ein kleiner Test zeigt, dass Du recht hast. Ich habe die Funktion bisher von einem Skript aus aufgerufen, dann ist es langsam (insgesamt 13 Sekunden). Wenn ich die Funktion von einer Funktion aus aufrufe, ist es schnell (weniger als 0.05 Sekunden).

Dann bleibe ich wohl bei der Funktionsvariante - oder gibt es einen Weg, das von einem Skript aus aufzurufen, sodass es dennoch schnell rechnet?

Danke und viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ja, eine Anforderung hast du erfüllt. Die zweite steht direkt darunter:
Zitat:
The second important idea required to take advantage of in-place computation is that the in-place function must itself be called from another function, as I've done with inplaceTest.



Zitat:
Dann bleibe ich wohl bei der Funktionsvariante - oder gibt es einen Weg, das von einem Skript aus aufzurufen, sodass es dennoch schnell rechnet?

Nicht dass ich wüsste.

Grüße,
Harald
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 - 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.