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

Parallelisierung

 

psigh
Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 16.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2011, 20:43     Titel: Parallelisierung
  Antworten mit Zitat      
Hallo,


ich habe eine Frage zum Thema Parallelisierung.

Ich habe eine Matrix mit 30 Spalten und 3131 Zeilen. Jetzt wird jede spalte abgearbeitet. Es gibt verschiedene Zeitpunkte (zeitpunkte gehen Zeilenweise nach unten) an dem ein Mittelwert aller Werte, die bis zu dem zeitpunkt vorliegen, berechnet werden muss.

Bsp. Zeitpunkte für Spalte 1: 4, 600, 2000

Also Berechnung: Mittelwert von 1:4, von 1:600, von 1:2000


Das wird für jede Spalte gemacht und für jede Spalte gibt es andere Zeitpunkte. Laut Profili report nimmt dieser Vorgang (einer von vielen in dem ganzen Programm) unheimlich viel Zeit in Anspruch. Ich habe nicht die Parallel Computing Toolbox und wollte jetzt mal fragen, ob man das nicht trotzdem irgendwie verbessern kann.



Vielen Dank,


Dominik
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 12.07.2011, 20:51     Titel:
  Antworten mit Zitat      
Ob man etwas beschleunigen kann, lässt sich am Besten an Hand deines Programmcodes sagen Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
psigh
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 16.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2011, 21:00     Titel:
  Antworten mit Zitat      
Code:

for i=1:length(indikator)    
        if indikator(i)==1    
            for d=1:length(Assets)            
                renditeprognose{1,i}{1,1}(d,1)= mlochuber((Renditen(1:i,d)))*(1/t);        
            end            
        end        
    end
 


In diesem Indikator stehen die Zeitpunkte drin, die betrachtet werden sollen. Z.B. Tag 100, 400 700 usw.

An diesen Tagen wird jeweils für jedes Asses die Standardabweichung der Renditen von Tag eins bis zu dem aktuellen Tag berechnet und in ein Array eingetragen. Jetzt wird der Mittelwertn nicht mit mean berechnet, sondern mit einem speziellen Verfahren. Aber auch wenn ich mean nehme, dauert diese Prozedur seeeehr lange. Länger als alles andere, was ich da mache. Hätte ich nicht gedacht.


Vielen Dank,


Dominik
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: 12.07.2011, 21:22     Titel:
  Antworten mit Zitat      
Hallo,

die beste Chance dürfte in Vektorisierung (Beseitigung der for-Schleifen) liegen.
Wenn du etwas, das nicht lange dauert, sehr oft machst, kann es in der Summe letztlich doch lange dauern.
Ohne genauere Kenntnis des aufgerufenen Codes wird man dir wohl nicht weiterhelfen können.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.07.2011, 23:51     Titel:
  Antworten mit Zitat      
Hallo psigh,

Ist die Variable pre-alloziert? Die sehr verschachtelte Indizierung raubt ebenfalls Zeit. Vielleicht ist dies schon schneller:
Code:
inv_t = 1 / t;
for i=1:length(indikator)    
  if indikator(i)==1    
    v = zeros(1, length(Assets));
    for d = 1:length(Assets)
       v(d) = mlochuber(Renditen(1:i, d)) * inv_t;
    end
    renditeprognose{1,i}{1,1} = v;
  end        
end

Noch etwas schneller wären Integertyoen als Index. Wenn Assests z.B. nur 10.000 Elemente enthält:
Code:
for d = uint16(1):uint16(length(Assets))

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
psigh
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 16.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2011, 15:13     Titel:
  Antworten mit Zitat      
Vielen Dank für Eure Antworten.


Ich hab mich jetzt lange um den Code gekümmert und ihn auch nochmal mit Leute durchgesprochen. Ich habe ein paar Sachen verbessert, was aber nicht wirklich viel gebarcht hat. Die CPU Auslastung ist beo 20% und es wird 4 Stunden gerechnet. Deswegen hab ich jetzt eine andere Lösung. Ich hab den Code in vier verschiedene Codes zerlegt. Ich starte Matlab 4 mal und lasse sie parallel laufen (-: Danach führe ich die Ergebnisse zusammen. Jetzt ist die CPU Auslastung bei 90% und ich spare eine Menge Zeit.
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 23.07.2011, 19:58     Titel:
  Antworten mit Zitat      
wenn die präallozierung richtig ist kannst du auch vor die größte for-schleife ein "par" (-> parfor) schreiben...
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
psigh
Themenstarter

Forum-Century

Forum-Century


Beiträge: 118
Anmeldedatum: 16.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2011, 20:01     Titel:
  Antworten mit Zitat      
Kann ich doch nicht, weil ich diese toolbox nicht habe
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 24.07.2011, 10:46     Titel:
  Antworten mit Zitat      
Ahhh... Embarassed
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
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.