Multiprocessing und Hyperthreading in LabVIEW
- Aktualisiert2025-08-27
- 3 Minute(n) Lesezeit
Ein Hyperthreading-fähiger Computer hat nur einen Prozessor, arbeitet aber wie ein Multiprozessor-Computer. (Windows) Hyperthreading ist ein Feature von einigen Versionen des Intel Pentium 4 und höher. Wenn Sie auf einem solchen Computer den Windows-Task-Manager aufrufen und auf die Registerkarte Leistung klicken, wird der Nutzungsverlauf zweier CPUs angezeigt. (macOS) Starten Sie den Activity Monitor zum Prüfen der Leistung.
Ein Hyperthreading-fähiger Prozessor arbeitet wie mehrere auf einem Mikrochip eingebettete Prozessoren. Einige Ressourcen auf dem Chip sind doppelt, z. B. der Registersatz. Andere Ressourcen werden gemeinsam genutzt, z. B. die Ausführungseinheiten und der Cache. Des Weiteren gibt es Ressourcen, z. B. Mikrooperationen speichernde Puffer, die partitioniert sind. Dabei wird jedem logischen Prozessor ein Teil zugewiesen.
Die Optimierung einer Anwendung zur Nutzung der Vorteile von Hyperthreading ähnelt der Optimierung einer Anwendung für ein Multiprozessorsystem (auch Multicore-, SMP- oder System mit mehreren CPUs genannt). Es gibt aber einige Unterschiede. Bei einem Hyperthreading-fähigen Computer werden beispielsweise Ausführungseinheiten gemeinsam genutzt, ein Dual-Prozessor-Computer dagegen enthält zwei vollständige Sätze von Ausführungseinheiten. Folglich arbeitet jede durch Fließkomma-Ausführungseinheiten beschränkte Anwendung besser auf Multiprozessor-Computern, da die Ausführungseinheiten nicht gemeinsam genutzt werden müssen. Dasselbe Prinzip gilt bei Cache-Konflikten. Versuchen zwei Threads auf den Cache zuzugreifen, so ist die Leistung bei einem Multiprozessor-Computer besser, da jeder Prozessor einen eigenen Cache hat.
Übersicht LabVIEW-Ausführung
Das Ausführungssystem von LabVIEW ist bereits für Multiprocessing ausgelegt. In befehlsorientierten Programmiersprachen werden Multithread-Anwendungen erstellt, indem mehrere Threads erzeugt und mit Hilfe des Programmcodes koordiniert werden. LabVIEW erkennt dagegen automatisch, wenn in einem VI die Möglichkeit zum Multithreading besteht und übernimmt alle Funktionen, die zur Koordination der einzelnen Threads erforderlich sind.
Im folgenden Beispiel wird das Multithreading-Ausführungssystem von LabVIEW genutzt.
Bei diesem VI erkennt LabVIEW, dass die beiden Schleifen unabhängig ausgeführt werden können. In einer Multiprocessing- oder Hyperthreading-Umgebung ist oft sogar eine gleichzeitige Ausführung möglich.
Beispiel einer parallelen Ausführung mit Primzahlen
Im folgenden Beispiel werden Primzahlen größer Zwei berechnet.
Das Blockdiagramm bewertet jede ungerade Zahl zwischen Drei und Anzahl Terme und bestimmt dann, ob es sich um eine Primzahl handelt. Die innere For-Schleife gibt TRUE aus, wenn der Term durch eine Zahl mit einem Rest von Null geteilt werden kann.
Die Iterationen der äußeren For-Schleife sind voneinander unabhängig. Wenn die Iterationen einer For-Schleife in beliebiger Reihenfolge ausgeführt werden können, verbessert sich durch Aktivierung der parallelen Ausführung von Schleifeniterationen die Leistung der For-Schleife. In diesem Beispiel eignet sich die äußere For-Schleife gut für die parallele Ausführung von Iterationen, da die einzelnen Iterationen sehr rechenintensiv sind.
Um die parallele Ausführung für dieses VI zu aktivieren, klicken Sie mit der rechten Maustaste auf die For-Schleife und wählen Sie die Option Parallele Ausführung von Iterationen konfigurieren aus dem Kontextmenü. Daraufhin wird das Dialogfeld Parallele Ausführung von For-Schleifen-Iterationen angezeigt.
Beim parallelen Ausführen von Schleifeniterationen macht sich LabVIEW das Vorhandensein mehrerer Prozessoren zunutze. Die Beispielversion mit paralleler Ausführung ist effizienter, da LabVIEW verschiedene Codeabschnitte gleichzeitig ausführen kann.
Beachten Sie, dass diese beiden Beispiel-VIs keinen Code für explizites Thread-Management enthalten. Das Paradigma der LabVIEW-Datenflussprogrammierung ermöglicht dem LabVIEW-Ausführungssystem, parallele Schleifeninstanzen in verschiedenen Threads auszuführen.
Programmierung für Hyperthreading-fähige oder Multiprozessor-Systeme
Die Optimierung der Leistung einer Anwendung für einen Hyperthreading-fähigen Computer erfolgt fast auf die gleiche Weise wie für einen Multiprozessor-Computer. Ein paar Unterschiede gibt es allerdings, da bei Hyperthreading-fähigen Computern einige Ressourcen zwischen den beiden logischen Prozessoren gemeinsam genutzt werden, z. B. Cache und Ausführungseinheiten. Denken Sie vielleicht, dass gemeinsam genutzte Ressourcen auf einem Hyperthreading-fähigen Computer die Anwendung einschränken? Dann testen Sie die Anwendung mit einem Performance Analyzer wir dem Intel VTune.