Laufzeit komischerweise hoch < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Hallo, alle zusammen!
Als erstes natürlich:
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Ich habe ein Problem mit MatLab und bin als Psychologe und MatLab-Neuling mit derart informatorischen Problemen überfordert, deswegen würde ich mich freuen, wenn mir jemand helfen könnte.
Ich habe ein MatLab-Programm geschrieben, dass aus 2 Teilen besteht:
1. Teil: Import einer csv-Datei (40MB), die ca. 820.000 Zeilen über 29 Spalten ergibt (ja, das is ne Menge Holz...)
2. Teil: zwei for-schleife, die nacheinander simple Berechnungen über alle Zeilen und Spalten durchführen (erst die 1. Schleife über alle Zeilen und Spalten, dann die 2.)
Wenn ich das gesamte Programm ausführe, wird gleich die erste for-Schleife nur langsam ausgeführt. Bei der Datenmenge schätze ich, dass der Rechner mit nur dieser Schleife etwa 4 Stunden beschäftigt ist.
Wenn ich das Programm aber im Editor öffne und erst nur den Import markiere und ausführen lasse und, sobald er fertig ist, die beiden for-Schleifen markiere und ausführe, dann wird jede Schleifen in ca. 3 min abgearbeitet.
Obwohl in beiden Fällen genau derselbe Programmcode verwendet wird, ist die Laufzeit des Gesamtprogramms 50 mal so hoch. Eigentlich wird ja auch im Gesamtprogramm schrittweise vorgegangen, so dass überhaupt kein Unterschied bestehen sollte.
Da ich 30 Dateien habe und nicht jeweils 5 Programme nacheinander für jede Datei starten will, hätte ich natürlich gerne nur ein Programm, was alles macht.
Irgendwie naheliegend war für mich, dass es mit dem Speicher zusammenhängt. Also, dass bei der Ausführung des Gesamtprogramms noch Speicher durch die Importierung belegt ist und es dadurch zu der Verlangsamung kommt. Also habe ich folgendes probiert:
1. Größerer PC (CPU+RAM)--> Import geht schneller, Problem bleibt bestehen
2. vorherige Allocierung aller verwendeten Matrizen --> Import geht noch schneller, aber immer noch gleiches Problem
3. 60 Sek. Pause nach Import in das Programm einbauen --> kein Effekt
4. Aufspaltung in mehrere .m-files, die von einem globalen .m-file aufgerufen werden --> kein Effekt
5. mit pcode .m files in .p files umgewandelt und in globalen file gesteckt --> kein Effekt
Jetzt bin ich mit meinem Latein am Ende, wobei ich von den .p - files nicht viel Ahnung hab. Vielleicht kann man damit noch was machen.
Also, wenn jemand eine Idee hat, woran es liegt, oder weiß, wie ich vielleicht den Speicher zwischendurch putzen kann, dann wäre ich echt dankbar. Die Auswertung dieser Daten macht soviel Arbeit, dass ich jeden Aufwand bei der Aufbereitung verhindern möchte.
Mfg
Christoph
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:02 Mi 28.06.2006 | Autor: | dormant |
Hi!
Ich kann mir nur schwer vorstellen, was da schiefgeht, aber wenn du mal den Code angibst, dann hätte ich vielleicht ne Idee.
Gruß,
dormant
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:16 Mi 28.06.2006 | Autor: | viktory_hh |
Ich bin sehr gespannt, schicke mal den Code rüber ))
kann vielleicht helfen, HOFFENTLICH !!!!!
|
|
|
|
|
Guten Morgen, liebe MatLab-Freunde!
Also, als erstes vielleicht: Ich hab keine Erklärung für das Prolem, aber eine Lösung, die, wenn auch unschön, funktioniert. Ich habe jetzt in das Programm direkt nach dem Import eine Speicherung des Workspace eingebaut, dann ein "clear all" und dann ein erneutes Laden des Workspace. Damit funktioniert es jetzt. Ich habe eigentlich schon viel zu viel Zeit in das Problem gesteckt und gebe mich damit zufrieden. Für diejenigen, die sich aber weiter damit beschäftigen möchten, stelle ich mal das Programm mit ein:
[url=1] Datei-Anhang [mm] [C:\abschnitte_und_fuellen.m]
[/mm]
Ich weiß nicht, ob das hilft, da ich die Daten nicht mit einstellen kann. Aber vielleicht interessiert sich ja trotzdem wer dafür.
Vielen Dank für alle Ratschläge!
Christoph
|
|
|
|