|
|
Skript Laufzeit optimieren - Verkettete For Schleife |
|
NiklasMatlab |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.03.2021, 01:23
Titel: Skript Laufzeit optimieren - Verkettete For Schleife
|
|
Hey fleißige Programmierer,
ich müsste ein paar Zeilen code optimeiren, durch die mein Programm teilweise 10 Stunden braucht um durchzulaufen, vielleicht kann mir wer helfen.
Folgende Zeilen bereiten das Problem:
Die Workspace Variablen sind im Anhang unter Datein gespeichert.
Vielleicht kann mir wer helfen:(
Mit freundlichen Grüßen,
Niklas
Beschreibung: |
|
Download |
Dateiname: |
B.mat |
Dateigröße: |
32.92 MB |
Heruntergeladen: |
389 mal |
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 18.03.2021, 09:27
Titel:
|
|
Hallo,
für den gegebenen Datensatz benötigt mein Rechner 1 Minute.
Warum sind das bei dir 10 Stunden? Hast du einen Datensatz, der deutlich größer ist? Hast du viele solcher Datensätze? Hier wären genauere Informationen hilfreich.
Wenn es darum geht, den vorliegenden Code zu beschleunigen:
Das dauert bei mir nur 2 Sekunden, davon etwa 2/3 für das Verketten. Wenn du die Möglichkeit hast, würde ich b direkt als Matrix statt als Struktur speichern.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
NiklasMaltab |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.03.2021, 19:22
Titel:
|
|
Hallo Harald, der gegebene Datensatz ist nur ein Beispiel und ein kleiner Datensatz.
Habe viele die wesentlich größer sind.
Ok Danke schonmal für die Beschleunigung.
Würde es als Matrix schneller gehen?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 18.03.2021, 20:52
Titel:
|
|
Hallo,
Zitat: |
der gegebene Datensatz ist nur ein Beispiel und ein kleiner Datensatz. Habe viele die wesentlich größer sind. |
Das dachte ich mir. Die Frage ist, wie groß der echte Datensatz ist. Passt z.B. ein Datensatz komplett in den Speicher?
Vektorisierter Code benötigt oft mehr Speicher, insofern sind das wichtige Punkte.
Zitat: |
Würde es als Matrix schneller gehen? |
Ja! Bei meinem Versuch gingen 2/3 der Zeit für die Umwandlung von Struct zu Matrix drauf. Wenn man direkt mit einer Matrix arbeitet, benötigt nochmal um einen Faktor 3 weniger Zeit.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
NiklasMatlab |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.03.2021, 20:45
Titel:
|
|
Ne , manchmal bekomme ich die Fehlermeldung "out of memory".
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 20.03.2021, 10:08
Titel:
|
|
Hallo,
und nun? Wie meinst du, dass man dir nach diesem Satz nun helfen kann oder soll?
Nochmal: wie groß sind deine Datensätze (maximal)?
Zudem:
* wie groß ist dein Arbeitsspeicher?
* wie sieht dein aktueller Code aus?
* in welcher Zeile genau bekommst du die Fehlermeldung?
In dem Beispieldatensatz waren sehr viele Nullen enthalten. Wenn das bei den anderen Datensätzen auch so ist, können dünnbesetzte Matrizen (
sparse
) Speicher sparen und die Berechnungen beschleunigen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
Mmmartina |
Forum-Meister
|
|
Beiträge: 745
|
|
|
|
Anmeldedatum: 30.10.12
|
|
|
|
Wohnort: hier
|
|
|
|
Version: R2020a
|
|
|
|
|
|
Verfasst am: 20.03.2021, 17:20
Titel:
|
|
Je nach Umfang der Daten bzw des Codes kann auch die Verteilung auf mehrere Prozessorkerne sinnvoll sind. Hierzu solltest du unter parallel Computing bzw der entsprechenden Toolbox näheres finden.
Aber grundsätzlich müsste man erstmal wissen, was "viele Daten" sind und wie viel Arbeitsspeicher vorhanden ist. (Und welche Programme zusätzlich im Hintergrund noch Arbeitsspeicher fressen.)
_________________
LG
Martina
"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 22.03.2021, 14:35
Titel: Re: Skript Laufzeit optimieren - Verkettete For Schleife
|
|
Hallo NiklasMatlab,
Die Grundregel für Schleifen lautet:
Vermeide alle wiederholte Arbeit im Inneren der Schleife.
Damit:
Hier wird das DOT-Produkt verwendet, statt SUM und die elementweise Multiplikation.
Als Matrix wäre das natürlich schneller. Das Problem ist dabei wohl die Größe des RAMs, aber da heißt die Lösung: Mehr RAM installieren.
Gruß Jan
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|