Die Matrix M enthält dann andere Zahlen die ich miteinander vergleiche, indem ich die Quotienten bilde, dann einen Tolleranzbereich abfrage und letztlich schaue welche Zeilen noch in beiden vorkommen
Code:
M=[1001501701801905070;
906050180302010;
10182731391923516]% ebenfall deutlich größer
Also zweite Möglichkeit habe ich bislang probiert, alle möglichen Quotienten Qn,k zu berechnen indem ich einfach die Matrix M immer weiterverschoben habe (circshift) und dann in der for-schleife bereits die berechneten Quotienten lade. Allerdings ist das im Moment zu komplex um zu beurteilen was schneller geht.
Die eigentliche Frage ist also: Bringt es etwas, die Quotienten Qn,k bereits vor der for-Schleife (welche einige Millionen Durchläufe hat) zu berechnen und dort nur noch zu laden oder ist die Quotientenbildung ohnehin extrem schnell?
Mit der ersten Methode braucht ich für 50 Mio Zyklen ca. 8h. Gibt es andere hilfreiche Tipps zur Beschleunigung (außer preallocation)?
Vielen Dank für die schnelle Antwort!
Im Prinzip stimmt es schon, dass ich kein for-schleife brauche. Allerdings bekomme ich dann ein Problem mit dem Arbeitsspeicher!
Hier bekomme ich also für Q12 eine 100x500 Matrix...
in Wirklichkeit ist aber A einige Mio lang, und M einige 1000,
d.h. ich kann die Matrix so nicht mehr erstellen (Memory).
Bei mir ist jedoch t1 immer kleiner als t2... d.h. die for-schleife ist schneller. Wird das dann für noch größere Werte wieder anders? (Ich habe bis M=100,000 getestet und t1 war immer kleiner t2).
Gewinn ich dann überhaupt Zeit, wenn ich wie gezeigt in Blöcke unterteile um auch noch größerer Matrizen zu prozessieren?
du musst schon ein zweites tic einfügen, bevor die zweite Berechnung anfängt.
Zudem einen ; nach "MV2 = " um die lange dauernde Anzeige zu unterdrücken.
Eine Alternative zur Vektorisierung kann Parallelisierung sein, mit
... sorry das war ein Fehler. Ich muss den Code gerade vom Laptop abschreiben. Ich habe natürlich ein zweites tic eingefügt und das ;
gesetzt. Trotzdem bin ich mit der schleife immer schneller...
ich bekomme also immer die beste Performance mit Option1. Es scheint also schneller zu sein, wenn ich 2 Vektoren miteinander vergleiche als 2 Matrizen (in dafür keinem (Bsp2) oder weniger (Bsp3) Zyklen)
dann sehe ich sequentiell keine Beschleunigungsmöglichkeit.
Eine Alternative wäre wie gesagt parfor.
Grüße,
Harald
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.