Zeitmessung unter Matlab/Erzeugung von Zufallszahlen
ronja
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.02.2009, 13:05
Titel: Zeitmessung unter Matlab/Erzeugung von Zufallszahlen
Hallo,
ich muss unter Matlab den Zeitaufwand mehrere Programme vergleichen. Dabei ist mir eine Sache aufgefallen, die ich mir nicht erklären kann: ich habe ein Programm, das ich von zwei verschiedenen Hauptprogrammen aus aufrufe und je nach Hauptprogramm ändert sich die Laufzeit erheblich!! Dabei wird in beiden Hauptprogrammen vorher nicht viel Speicherplatz o.ä. reserviert. Ich habe mir das mit dem Profiler mal genauer angeguckt: In dem ersten Programm dauert die Erzeugung von 50000 Zufallszahlen (randn) 1.371 Sekunden, in dem zweiten Programm 2.35 Sekunden. Hat von Euch vielleicht jemand eine Idee woran das liegen kann?
Vielen Dank schonmal!
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.02.2009, 13:09
Titel:
Es wird wohl am Code liegen.
ronja
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.02.2009, 13:21
Titel:
aber der code ist ja komplett identisch... d.h. ich rufe bei dem ersten hauptprogramm
tic
programm
toc
und bei dem zweiten hauptprogramm genauso
tic
programm
toc
auf. und die zeit ist unterschiedlich und innerhalb des programms ist die zeit zur erzeugung der zufallszahlen auch unterschiedlich, obwohl es doch dasselbe programm ist.
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.02.2009, 13:26
Titel:
Die Erzeugung von 50000 Zufallszahlen sollte bei halbwegs aktueller Hardware doch schon geringfügig schneller als 1 s sein.
Kannst du ein Beispiel erstellen, an dem man das nachvollziehen kann?
Gerinfügig unter 1s ist gut, bei mir war das maximale 0.005s auf Arbeit, d.h. da hab ich noch nicht mal den super Computer. Also es sollte doch wesentlich schneller gehen.
Viele Grüße,
der Oli
ronja
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.02.2009, 13:53
Titel:
Ich habe mich etwas falsch ausgedrückt, es werden nicht 50000 Zufallszahlen erzeugt, sondern 50000 Zufallsvektoren mit jeweils 1000 Einträgen... versuceh gerade die Programm so zu verkürzen, dass ich sie mal online stellen kann. Macht es denn einen Unterschied wieviel Zufallszahlen vorher schon erzeugt wurden? Ich habe die Programme öfters hinter einander druchlaufen lassen und der Zeitunterschied ist immer geblieben.
so, habe die codes mal stark vereinfacht, bitte nicht nach dem Sinn der Codes fragen , es wird aber das Problem klar, wenn man sich die beiden Hauptprogramm mit dem Profiler anschaut (und dasselbe tritt bei mir auch bei den großen Programmen auf): hauptprogramm_eins braucht auf meinem rechner für alle 50000 k=randn(m,1) 1.446 sekunden und hauptprogramm_zwei braucht 2.41 sekunden.
for i=1:30 for j=1:40
m=1000;
n=10;
a=0.1*ones(m,n);
b=0.4*ones(m,1);
test_neu(m,n,a,b)
stop %für den zeitvergleich, in meinem programm wird es öfters
%aufgerufen
end
Bei mir laufen beide Programme in etwa gleich lange (Unterschied im 0,01-Bereich). Auch der Aufruf der "test_neu" dauert bei mir bei beiden gleich lange:
Matlab hat Folgendes geschrieben:
Elapsed time is 2.180942 seconds. -> test_neu in Programm 1 aufgerufen
Elapsed time is 2.181209 seconds. -> Programm 1 ohne die for-Schleife
Elapsed time is 2.165454 seconds. -> test_neu in Programm 2 aufgerufen
Elapsed time is 2.165732 seconds. -> Programm 2 ohne Änderung
Hm, das ist ja alles sehr seltsam.... vielen Dank Euch schonmal, bei mir brauchen die Programme wirklich unterschiedlich lang...
programm 1:
4.863 sec und (k=randn(m,1): 50000 aufrufe) 1.482 sec
Programm 2:
5.425 sec und (k=randn(m,1): 50000 aufrufe) 2.407 sec
komisch komisch, dachte, das liegt evtl. an matlab, das da noch irgendwas vektorisiert wird... kann das sonst auch an vista liegen? habe das programm auf anderen (vista) rechnern laufen lassen und da kam dasselbe raus... und habe es auch öfter durchlaufen lassen...
viele grüße, ronja
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
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.