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

Vektorisierter Code IMMER schneller?

 

Pedro

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2010, 18:46     Titel: Vektorisierter Code IMMER schneller?
  Antworten mit Zitat      
Liebe Forumsmitglieder,

ich durchstöbere das Internet nun schon eine Weile. Immer wieder finde ich den Hinweis, dass vektorisierter Code in Matlab einem Code mit for- und if-Schleifen überlegen ist. Ich frage mich, ob das ein in Stein gemeißeltes Gesetz ist oder ob es möglicherweise auch Ausnahmen gibt?

Hintergrund: Ich muss eine große nxn-Matrix berechnen. Jede Komponente hängt von vier Größen ab. Um die einzelnen Einträge zu berechnen muss ich auf Operationen wie "sqrt", "log" aber auch "quadv" zurückgreifen.

Ich habe zwei Varianten für den Code geschrieben. Bei der einen verwende ich Spaltenvektoren und eine for-Schleife, um die Matrix aufzustellen. Die zweite Variante ist vollständig in Matrixnotation geschrieben, aber durchläuft von der Idee her die gleichen Schritte, wie der semi-vektorisierte Code. Ein Zeitvergleich für n=720 liefert, dass ich für den ersten Code 178s benötige, für den zweiten vektorisierten Code allerdings mehr als 500s. Der Profiler zeigt mir in beiden Fällen (wie zu erwarten) an, dass die die meiste Zeit bei der numerischen Integration mit quadv draufgeht.

Deswegen habe ich bislang den Eindruck, dass sich die vollständige Vektorisation nicht gelohnt hat. Liege ich da falsch? Oder zeigt sich der Gewinn erst, wenn die Matrix noch deutlich größer wird?

Vielen Dank und liebe Grüße,
Pedro


Harald
Forum-Meister

Forum-Meister


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

generell kann man sagen, dass Vektorisierung meistens, aber nicht immer schneller ist. Bei der Berechnung großer Matrizen ist es oft so, dass die Berechnung jedes Elements für sich in geschachtelten for-Schleifen sehr langsam ist, die spaltenweise Berechnung und die Berechnung der gesamten Matrix sich jedoch in ähnlichen Regionen aufhalten.
Um zu beurteilen, wie es bei wachsenden Matrix-Größen ist, kannst du ja mal die Laufzeit für n = 100, 200, ... , 1000 vergleichen und sehen, wie sich das entwickelt.
Entscheidend ist natürlich auch, dass die beiden verglichenen Versionen in sich wirklich so effizient wie möglich sind.

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.