Matlab Parallelisieren

Wolly555

Lt. Commander
Registriert
Dez. 2009
Beiträge
1.335
Hallo.

Ich möchte in Matlab ein paar .txt files mit Messdaten einlesen(ca.300Mb pro file).
Das sind immer 14 Spalten und X Zeilen (ca. 300s * 10000 Messwerte/s).

Ich nutze dazu den Befehl : "A = load(path)"

Da das Einlesen sehr lange dauert, möchte ich Matlab gerne beibringen, 4 Files (ich habe 4 CPU Kerne) gleichzeitig einzulesen.

Zur Zeit nutzt es nur einen Kern, da die Befehle nacheinander abgearbeitet werden.

Schonmal besten Dank für eure Antworten!

Gruß
Wolly
 
Würde auch auf die Festplatte tippen.
Ein und das selbe Skript liest an der Uni erheblich schneller ein, als bei mir zu Hause, obwohl meine CPU doch ein "wenig" mehr Power auf einem Kern hat.

edit: und die CPU Auslastung bleibt dabei gering
 
Zuletzt bearbeitet:
was wird denn beim einlesen mehr belastet? CPU oder Festplatte?
Das sind natürlich ne Menge Daten, die jeweils als Text in Zahlen formatiert werden möchten. Werden denn immer die gleichen Tabellen eingelesen? Dann wäre es vielleicht günstiger das ganze als Mat-File zu speichern.

Zusatz:
Ansonsten tippe ich auch auf die Festplatte, wie meine Vorredner. Dann bringt auch parallelisieren nichts.
 
Zuletzt bearbeitet von einem Moderator:
SSD Kaufen :evillol:
 
An der <festplatte liegt es nicht...ein File braucht ca. 100s...macht bei 300mb/file 3Mb/s.
 
Hi,

matlab liest doch zeile für zeile ein.
ich denke nicht, das man dies dann paralelisieren kann.

Auf der arbeit haben wir größere Daten und langsame PC´s und man benötigt da ca 2min. für 20*12000 messwerte einzulesen. allerdings hab ich diese ins xls format gewandelt.

Wie lange benötigst du denn dafür?
 
Die Messwerte liegen als .txt bzw .lvm vor.
Daran kann ich leider nichts ändern, da die Daten von einem Echtzeitsystem über Labview kommen.
 
Ich bleib bei der Festplatte.
Ein File mit 3 Spalten und 300 Zeilen kann ich in der Uni am Server instant einlesen, zu Hause dauert das ~3s. An der CPU Auslastung tut sich dabei gar nichts

edit: Ich packs gleich noch auf eine Externe, mal sehen, ob sich daran über USB was ändert;)

So, mehrere Durchläufe gemacht:
Intern ~2,4s
Extern ~2,9s

edit: Wer weiß, wie gut ich im Stoppen bin, vielleicht mach ichs noch mit Tic Toc ;)
 
Zuletzt bearbeitet:
hast du jemals die auslastung eines cpu-kernes (auf dem matlab läuft) beim auslesen betrachtet?

ansonsten wenn es doch nicht an der platte liegt, dann musst du dich vielleicht mit der parallel-computing-toolbox von matlab beschäftigen.
oder vielleicht die txt-datei einmal einlesen und dann richtig formatiert als mat-file speichern. das spart speicherplatz und konvertierungszeit beim nächsten laden. das ließe sich dann auch extra als eigene funktion umsetzen.
 
Ok.

Danke für eure Antworten.

Dann kann man halt nix machen.

Werde nach dem Einlesen Alles als .mat speichern, dann sollte es beim nächsten mal schneller gehen.
Ergänzung ()

Wen es interessiert:

Als .mat gespeichert und wieder eingelesen beschleunigt die Sache um den Faktor 10.

Es liegt scjeinbar an der nötigen konvertierung der .txt files.

Schönen Abend
 
ok an der Platte liegt es glaub echt nicht. Hab eine ~120MB große csv-file einmal von der C300 SSD, einemal von ner Spinpoint F3 500gb und einmal von ner externen USB-Platte mit dlmread('filename', ',', 5,0) laden laßen und es dauert jedesmal ca. 8,5s, also ~14MB/s. Für feinere Unterschiede müsste wohl ne größere file oder eine Testserie her.....:rolleyes:
 
@confused: Danke für den Test.
 
Hab jetzt mal mit tic toc rumgespielt, und load, importdata sowie .txt und .xls verglichen. Alles mit der Internen (und nem anderen file)
load und .txt: 0.003234 seconds
importdata und .txt: 0.026008 seconds.
importdata und .xls: 1.891182 seconds.

Schließe jetzt noch mal die externe an, und sehe dann, wies läuft ;)

edit:
So, 2mal nacheinander ein txt-file je 100000mal von Samsung F3, WD Green und WD Extern eingelesen:
Samsung:
107.9770s
WD Green:
107.6052s
WD Extern:
109.2905

Die Werte sind leider nicht hunderprozentig reproduzierbar, das Verhältnis bleibt ziemlich genau gleich. Vielleicht war meine bisherige Annahme ja falsch. Dass die CPU-Last von Core 1 bei diesem Test auf 100% geklettert ist, überrascht mich aber doch etwas. Allerdings kann das an der Addition liegen? Wenn ich 1 Milliarde Zufallszahlen addiere, bekomme ich auch beinahe 100% konstante Auslastung hin.

edit2:
Hab die tocs mal nicht addiert, sondern in einen Vektor schreiben lassen. Dann die einzelnen Werte durcheinander geteilt. Jede Festplatte war mal die "Schnellste". Jetzt wirds unheimlich :(

Werd wohl als Nächstes mal die CPU 1-2 GHz untertakten und sehn, was dann passiert ;)
 
Zuletzt bearbeitet:
nein
Ergänzung ()

So, hab jetzt noch eine "interessante" Entdeckung gemacht:
Habe einfach mal den fsb halbiert (von 400 auf 200).
Keinerlei Änderung bei load und importdata beim .txt file, aber eine Verdopplung der Zeit beim .xls file ;)

Muss mir mal ein größeres txt-file erstellen.
Ergänzung ()

So, da hab ich wohl eine mächtige Fehleinschätzung getätigt:(

Werte mit einem 762 MB file (und 'load'):

fsb 200 MHz: 404s
fsb 400 MHz: 217s

Hängt wohl doch sehr von der Größe des einzulesenden Files ab.
Jetzt find ich parallelisieren auch sehr interessant (auch wenn ich nie so große Dateien einlesen muss)
 
Zuletzt bearbeitet:
Toll, dass ihr euch so viel Mühe gemacht habt, großes Dankeschön.

Bei mir funktioniert der Befehl "textread" doppelt so schnell wie der "load"-Befehl.

Noch schneller gehts mit "textscan", man bekommt dann einen Cell-Array zurück.
 
Zurück
Oben