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

code beschleunigen

 

Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 04.08.2012, 09:09     Titel: code beschleunigen
  Antworten mit Zitat      
hallo jungs und mädels. ich brauch mal eure hilfe bei der beschleunigung eines simplen codes.
durch die nutzung von parfor hab ich schon ca 70% geschwindigkeit gewonnen. mir fällt grade aber nix ein was ich noch machen kann. vieleicht hat von euch ja jemand eine idee.
Code:
ak=1000000;
sw=1;
gew=100000;
kap=ak;
b=100;
n=zeros(b,1);
swmax=zeros(b,1);
kap1=zeros(b,1);
matlabpool open local 8
parfor k=1:b
sw=1;
kap=ak;
    while kap>0 && kap<ak+gew
    a=randi(37);
        if a<=18
          kap=kap+sw;
          sw=1;
        else
         kap=kap-sw;
          sw=sw*2;
        end
        if sw>swmax(k)
         swmax(k)=sw;
        end
        n(k)=n(k)+1;
    end
kap1(k)=kap;
sw=1;
kap=ak;
end
matlabpool close


schonmal danke für eure mühe Smile
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: 04.08.2012, 16:04     Titel:
  Antworten mit Zitat      
Hallo,

ich sehe keine einfache Möglichkeit, hier viel rauszuholen.

Ansonsten sehe ich im wesentlichen drei Ansätze:
1) MEX-Funktion generieren mit MATLAB Coder. Wenn der MATLAB-Code keine dafür nicht zulässigen Konstrukte verwendet (und danach sieht es mir nicht aus), dürfte der Aufwand recht gering sein.
http://www.mathworks.de/products/matlab-coder/
2) Vektorisierung. Ist hier nicht ganz einfach, aber ich könnte mir das prinzipiell z.B. so vorstellen: statt einer Zufallszahl wird ein Vektor von Zufallszahlen generiert, z.B. immer 10000 Zufallszahlen auf einmal oder (zunächst vielleicht in der Handhabung einfacher) soviele Zufallszahlen, wie man mindestens Schritte braucht, um zur nähergelegenen Grenze zu gelangen.
Das Errechnen von swmax wird dann eine Denksportaufgabe werden, es sollte jedoch die Mühe wert sein.

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

Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 04.08.2012, 17:37     Titel:
  Antworten mit Zitat      
vielen dank. hab mir schon gedacht das man nicht einfach viel rausholen kann.. code is ja recht simpel. das mit der mex funktion guck ich mir mal an danke Smile
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: 18.08.2012, 00:02     Titel: Re: code beschleunigen
  Antworten mit Zitat      
Hallo Winkow,

Dein Code erzeugt einige MLint Warnungen. Die würde ich unbedingt beachten.

Zu meiner Verblüffung wird der Code, zumindest wenn ich ihn in einem einzelnen Thread laufen lasse, 100 mal schneller, wenn ich folgendes ersetze:
Code:
...
q = 18 / 37;
...
parfor k=1:b
  sw=1;
  kap=ak;
  while kap>0 && kap<ak+gew
     % a=randi(37);
     % if a<=18
     % ==>
     if rand < q
       ...
 

Zudem wird der Code um 10% schneller, wenn man statt "swmax(k)" und "n(k)" lokale Variablen wie "swmaxk" und "nk" verwendet und sie erst nach der Schleife in das Feld schreibt. Das könnte allerdings bei PARFOR anders sein - ich habe die Parallel Processing Toolbox nicht.

Gruß, Jan
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.