Verwendung der parallelen Verarbeitung in Matlab

8

Ich arbeite an einer Zeitreihenbasierten Berechnung. Jede Iteration der Berechnung ist unabhängig. Könnte jemand einige Tipps / Online-Primer mit der Verwendung von Parallelverarbeitung in Matlab teilen? Wie kann dies innerhalb des eigentlichen Codes angegeben werden?

    
Eduardas 30.10.2010, 01:12
quelle

3 Antworten

12

Da Sie Zugriff auf die Toolbox "Parallel" haben, sollten Sie zunächst prüfen, ob Sie dies auf einfache Weise tun können.

Grundsätzlich, anstatt zu schreiben

%Vor%

Sie schreiben

%Vor%

Dann verwenden Sie matlabpool , um eine Anzahl von Arbeitern zu erstellen (Sie können maximal 8 auf Ihrem lokalen Rechner mit der Toolbox und Tonnen auf einem Remote-Cluster haben, wenn Sie auch eine Distributed Computing Server-Lizenz haben) Sie führen den Code aus und sehen, dass die Geschwindigkeit gesteigert wird, wenn Ihre Iterationen von 8 Kernen anstelle von einem ausgeführt werden.

Obwohl die parfor -Route am einfachsten ist, funktioniert sie möglicherweise nicht sofort, da Sie die Indizierung möglicherweise falsch durchführen oder auf ein Array in einer problematischen Weise verweisen usw. Sehen Sie sich die mlint-Warnungen an Lesen Sie im Editor die Dokumentation und verlassen Sie sich auf eine gute alte Testversion, und Sie sollten es ziemlich schnell herausfinden. Wenn Sie verschachtelte Schleifen haben, ist es oft am besten, nur die innerste zu parallelisieren und sicherzustellen, dass es viele Iterationen ausführt - das ist nicht nur ein gutes Design, sondern reduziert auch die Menge an Code, die Ihnen Probleme bereiten könnte.

Beachten Sie, dass insbesondere bei der Ausführung des Codes auf einem lokalen Computer möglicherweise Speicherprobleme auftreten (die sich im parallelen Modus aufgrund der Paging-Funktion möglicherweise sehr langsam auswirken): Jeder Worker erhält eine Kopie des Arbeitsbereichs Wenn bei der Berechnung ein 500-MB-Array erstellt wird, benötigen 8 Mitarbeiter insgesamt 4 GB RAM - und Sie haben noch nicht einmal angefangen, den Arbeitsspeicher des übergeordneten Prozesses zu zählen! Darüber hinaus kann es gut sein, nur N-1-Kerne auf Ihrem Rechner zu verwenden, so dass immer noch ein Kern für andere Prozesse übrig bleibt, die auf dem Computer ausgeführt werden können (wie ein obligatorisches Antivirenprogramm ...).

    
Jonas 30.10.2010, 15:34
quelle
5

Mathworks bietet eine eigene parallele Computing-Toolbox . Wenn Sie das nicht kaufen möchten, gibt es ein paar Optionen

  • Sie könnten Ihre eigene mex-Datei schreiben und pthreads oder OpenMP verwenden.
  • Stellen Sie jedoch sicher, dass Sie im parallelen Teil des Codes keine Mex api aufrufen, da sie nicht Thread-sicher sind
  • Wenn Sie grobkörnigere Parallelität über MPI möchten, können Sie pmatlab ausprobieren
  • Gleiches gilt für parmatlab

Bearbeiten: Link Parallel MATLAB mit OpenMP-Dateien hinzufügen

Ich habe nur das erste versucht.

    
srean 30.10.2010 01:28
quelle
2

Vergessen Sie nicht, dass viele Matlab-Funktionen bereits multithreadfähig sind. Durch sorgfältige Programmierung können Sie diese möglicherweise nutzen - überprüfen Sie die Dokumentation für Ihre Version, da die Mathworks die Reichweite und Anzahl der Multithread-Funktionen mit jeder neuen Version zu erhöhen scheinen. Zum Beispiel scheint 2010a Multithreading fft s zu haben, was für die Zeitreihenverarbeitung nützlich sein kann.

Wenn das intrinsische Multithreading nicht das ist, was Sie brauchen, dann ist, wie @srean es vorschlägt, die Parallel Computing Toolbox verfügbar. Für mein Geld (oder besser gesagt, das Geld meiner Arbeitgeber) ist es der richtige Weg, um parallel in Matlab zu programmieren, anstatt Dinge anzünden zu müssen. Ich muss zugeben, dass ich von der Toolbox und den Möglichkeiten, die sie bietet, ziemlich beeindruckt bin.

    
High Performance Mark 30.10.2010 11:12
quelle

Tags und Links