Software Blog

MATLAB Parallelisierung oder Caching: Vergleich der Signalverarbeitungsgeschwindigkeit in Stipulator

von Simon Sigl

Kurzzusammenfassung

  • Manchmal ist weniger mehr: schalten Sie nicht "alles" (Parallelisierung und Cache) ein, um die beste Leistung zu erzielen
  • Berücksichtigen Sie Ihren Anwendungsfall: wiederholte Berechnungen → Cache; einmalige Berechnungen → Parallelpool

  • Machen Sie Ihre eigenen Messungen.

  • Beachten Sie die Cache-Größe, um ein Auslagern auf die Festplatte zu vermeiden.

Sowohl Parallelisierung als auch Caching sind allgemeine Techniken, die darauf abzielen, die für rechenintensive Aufgaben erforderliche Zeit zu verkürzen. Ihre Unterstützung in MATLAB hat jedoch unterschiedliche Schwerpunkte:

  • Die Parallel Computing Toolbox muss separat erworben werden. Sie ermöglicht die parallele Ausführung von Berechnungen mit der parfor-Anweisung. Parallele Berechnungen verursachen jedoch Mehraufwand: Der parallel pool muss gestartet werden und die worker müssen koordiniert werden (verteilen von Aufgaben und Daten, sammeln der Ergebnisse), wodurch das Beschleunigungspotenzial begrenzt ist. Ob sich sich Parallelisierung praktisch lohnt, muss daher für jede Anwendung sorgfältig untersucht werden. Darüber hinaus gibt es einige (manchmal subtile) Codierungseinschränkungen, wenn die parfor-Anweisung verwendet wird.  
  • Memoization ist seit R2017a Teil von MATLAB (es ist keine separate Toolbox erforderlich). Es ermöglicht das Zwischenspeichern der Ein-/Ausgabepaare zeitaufwändiger MATLAB-Funktionen und vermeidet das erneute Ausführen der teuren Funktion, wenn sie wiederholt mit denselben Argumenten aufgerufen wird. Dabei wird wenig zusätzlicher Rechenaufwand verursacht, jedoch wird RAM zum Speichern der Ein-/Ausgabedaten benötigt. Einschränkungen bezüglich der zu speichernden Funktion existieren, sind jedoch eher schwach (z. B. darf die zu speichernde Funktion keine Seiteneffekte haben und von globalen Variablen abhängen).

Nutzen dieser Techniken in Stipulator

Die Signalverarbeitung in Stipulator ermöglicht sowohl Parallelisierung (wenn die Parallel-Computing-Toolbox verfügbar ist) als auch Caching (wenn für eine Signalverarbeitung konfiguriert). Wir haben einige Messungen an einem Benchmark-Projekt mit etwa 230 Fällen durchgeführt. Obwohl diese Ergebnisse stark anwendungsspezifisch sind, sind sie interessant genug, um geteilt zu werden. Bitte validieren Sie die hier gezeigten Trends mit Daten aus Ihrem Anwendungbereich!

  Cache aus Cache an
Parallel-Pool aus 11 s 2,5 s
Parallel-Pool an (vor Messung gestartet) 7 s 7 s

Zeitbedarf eine Signalverarbeitung mit verschiedenen Konfigurationen
für eine beispielhafte Stipulator-Datei (repräsentativ für KISS-Anwendungsfälle)
auf einem Notebook mit i7-Prozessor mit 6 Kernen und 16GB RAM

Folgendes kann beobachtet werden:

  • Ausgangspunkt ist ein Zeitbedarf von 11s (Cache und Parallelisierung aus).
  • Die beste Performance für wiederholte Berechnungen (in diesem Fall) wird allein mit Caching (2,5s) erreicht. Dieser Wert ist nicht null, das liegt hauptsächlich am Verwaltungsaufwand, der neben der tatsächlichen (zwischengespeicherten) Signalverarbeitung erforderlich ist.
    Beispiele für Anwendungsfälle die von Caching profitieren: wiederholte Signalverarbeitungen für unterschiedliche Darstellungen derselben Daten, Attributverarbeitung, Fallauswahl basierend auf verarbeiteten Attributen, Gruppendefinition basierend auf verarbeiteten Attributen, ...
  • Der Parallel pool erzielt in diesem Fall nur eine Beschleunigung um den Faktor 2.
    Beispiele für Anwendungsfälle die von Parallelisierung profitieren: Signalverarbeitung nur einmal, z. B. Signalextraktion direkt nach dem Öffnen der Datei, Batch Verarbeitung durch Skripte, ...
  • Durch das gleichzeitige Aktivieren von Parallel Pool und Caching wird die Rechenzeit nicht weiter verkürzt. Möglicherweise steht dies in Zusammenhang mit der Implementierung durch MATLAB: Der Cache eines parallel workers (jeder worker verfügt über eine eigene Cache-Instanz) scheint invalidiert zu werden, wenn er seine Aufgabe erhält.

Als Faustregel gilt, dass die beste Konfiguration von Ihrem konkreten Signalverarbeitungs-Anwendungsfall abhängt: Wiederholt (Caching) oder Einmalig (Parallelisierung). Dennoch werden Leistungsmessungen für Ihren speziellen Anwendungsfall empfohlen.

Anwendung

Parallelisierung

STIPULATOR nutzt automatisch die Parallelisierung, wenn ein paralleler Pool verfügbar ist. Wenn die Parallel Computing Toolbox installiert ist, kann der Pool manuell gestartet werden, indem Sie in die linke untere Ecke des Hauptfensters von MATLAB klicken:

Caching

Um eine optimale kontextabhängige Konfiguration zu ermöglichen, bietet STIPULATOR Optionen zur Konfiguration des Cache für die Signalverarbeitung. Die Cache-Konfiguration erfolgt im Dialogfeld "Signalverarbeitung bearbeiten".

Bitte beachten Sie, dass die Cache-Größe (Anzahl der zwischengespeicherten Fälle) ein entscheidender Parameter ist. Der Leistungsvorteil kann nur bei wiederholten Berechnungen mit genau denselben Eingaben (Fall, Signalverarbeitung, Verarbeitungspegel, Referenzdaten, Störungseinstellungen, ...) realisiert werden. Abhängig vom genauen Verwendungsmuster ist möglicherweise eine andere Cache-Konfiguration erforderlich. Der Cache sollte mindestens die Anzahl der normalerweise ausgewählten Stipulator cases sein. Mehr Cache ist jedoch nicht immer besser: Wenn Sie eine zu große Größe festlegen, kann dies die Leistung erheblich beeinträchtigen, sobald das Betriebssystem den RAM-Inhalt auf die Festplatte auslagert.

Zurück

Kommentare

Einen Kommentar schreiben

Was ist die Summe aus 2 und 6?