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

Zeitmessung unter Matlab/Erzeugung von Zufallszahlen

 

ronja

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.02.2009, 13:05     Titel: Zeitmessung unter Matlab/Erzeugung von Zufallszahlen
  Antworten mit Zitat      
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: ---
     Beitrag Verfasst am: 27.02.2009, 13:09     Titel:
  Antworten mit Zitat      
Es wird wohl am Code liegen.
 
ronja

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.02.2009, 13:21     Titel:
  Antworten mit Zitat      
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: ---
     Beitrag Verfasst am: 27.02.2009, 13:26     Titel:
  Antworten mit Zitat      
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?
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 27.02.2009, 13:34     Titel:
  Antworten mit Zitat      
Moin,

wie oft hast du das ausprobiert? Ist es immer so, dass der Aufruf aus dem einen länger dauert, als aus dem anderen?

Versuch mal die Programmaufrufe unmittelbar hintereinander zulegen, wenn möglich. Sind die Unterschiede dann immer noch so gravierend?

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 27.02.2009, 13:43     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
ronja

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.02.2009, 13:53     Titel:
  Antworten mit Zitat      
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.
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 27.02.2009, 14:07     Titel:
  Antworten mit Zitat      
Hmmm... ein paar kleine Schwankungen sind ja schon in Ordnung. Bei mir braucht Matlab diese Zeiten:
Code:
>> tic, rand(50000,1); toc
Elapsed time is 0.001599 seconds.
>> tic, rand(50000,1000); toc
Elapsed time is 1.821137 seconds.
>> tic, rand(50000,1000); toc
Elapsed time is 1.941438 seconds.
>> tic, rand(50000,1000); toc
Elapsed time is 1.847008 seconds.
>> tic, rand(50000,1000); toc
Elapsed time is 1.833900 seconds.


Aber mit einem Beispiel deinerseits wäre wohl am meisten geholfen...

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
ronja

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.02.2009, 14:19     Titel:
  Antworten mit Zitat      
so, habe die codes mal stark vereinfacht, bitte nicht nach dem Sinn der Codes fragen Wink , 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.

Hauptprogramm_eins:
Code:

function hauptprogramm_eins

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
 


Hauptprogramm_zwei

Code:

function hauptprogramm_zwei

m=1000;
n=10;
a=0.1*ones(m,n);
b=0.4*ones(m,1);
vergleich=zeros(1,2000);
for i=1:2000
 
    h=randn(n,1);
   k=randn(m,1);
    g=a*h+b.*k;

     vergleich(i)=length(find(g>0));
end

anzahl=test_neu(m,n,a,b);
 

und schließlich das Programm, das von beiden Hauptprogrammen aufgerufen wird:
Code:

function anzahl=test_neu(m,n,a,b)

anzahl=zeros(1,50000);
for i=1:50000
 
    h=randn(n,1);
   k=randn(m,1);
    g=a*h+b.*k;

     anzahl(i)=length(find(g>0));
end
 
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.02.2009, 15:46     Titel:
  Antworten mit Zitat      
Bist du sicher, dass hauptprogramm_1 schneller läuft als hauptprogramm_2?
Das kann eigentlich nicht sein.
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 27.02.2009, 15:52     Titel:
  Antworten mit Zitat      
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


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
ronja

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.02.2009, 16:16     Titel:
  Antworten mit Zitat      
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
 
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 - 2024 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.