Programmierstrategien für Multicore-Prozessoren: Task-Parallelität

Überblick

Dieses Whitepaper ist Bestandteil der Serie „Grundlagen der Multicore-Programmierung“
Multicore Programming Fundamentals Whitepaper Series

Inhalt

Task-Parallelität in LabVIEW

Mithilfe der grafischen Programmierumgebung LabVIEW ist paralleles Programmieren ganz einfach, selbst für Anfänger. Zwei separate Tasks, die hinsichtlich der Daten nicht voneinander abhängen, werden parallel ausgeführt. Es ist keine weitere Programmierung erforderlich.

Abbildung 1 zeigt eine einfache Datenerfassungsroutine. Der obere Abschnitt des Programmcodes besteht aus einem Task für die Erfassung einer Spannung und der untere Code ist der Task für die Ausgabe von digitalen Daten.

 

Abb. 1: In LabVIEW werden zwei Abschnitte des Programmcodes ohne Datenabhängigkeit unabhängig voneinander parallel ausgeführt.

Diese zwei unabhängigen Tasks zur Datenerfassung müssen sich dieselbe Zentraleinheit auf einem Single-Core-Prozessor teilen. Auf einem Multicore-Prozessor kann jeder Thread auf einem eigenen Prozessor ausgeführt werden, was die Ausführungsgeschwindigkeit erheblich verbessert.

Ist Datenparallelität Teil einer Applikation, so muss unbedingt sichergestellt werden, dass die zwei Tasks keine gemeinsamen Ressourcen haben, durch die es zu einem Engpass kommen könnte (wie etwa beim Programmcode in Abbildung 2).


[+] Enlarge Image

Abb. 2: Wenn ein Task von den Daten eines anderen abhängt, können die zwei Tasks nicht unabhängig ausgeführt werden.

In diesem Programm teilen sich die zwei Tasks Daten: Der digitale Tasks muss warten, bis der analoge Tasks begonnen hat. Obwohl dieser Programmcode parallel zu sein scheint, ist er dies in Wahrheit nicht, da sich die Tasks Daten teilen. Das muss unbedingt berücksichtigt werden, wenn Anwendungen mithilfe von Task-Parallelität programmiert werden.

Task-Parallelität in einer Anwendung

Bei der Eaton Corporation setzte eine Gruppe von Entwicklern – deren einzige Aufgabe darin besteht, die Mess- und Prüfsysteme zu verbessern, die in der Forschungs- und Entwicklungsabteilung für LKWs von Eaton eingesetzt werden – die Leistung der Multicore-Verarbeitung und der multithreading-fähigen Architektur von LabVIEW ein. Das Ziel war, die Anzahl an Kanälen, die durch Eatons Systeme verlaufen, auf das mehr als vierfache zu steigern und Echtzeitdeterminismus zu erzielen. Diese LabVIEW-Anwendung umfasst drei asynchrone Schleifen, welche die parallelen Aufgaben des Erfassens, der Teststeuerung und der Bedienung der Benutzeroberfläche umsetzen. Vor Einführung dieser Lösung konnte das Team die Prüfanforderungen nur erfüllen, indem entweder die Arbeitslast sequenziell aufgeteilt oder eine Reihe von Single-Core-Desktops zur Ausführung der Anwendung genutzt wurde. Mithilfe von kommerziellen Standarddesktopsystemen war das Team in der Lage, den Stromverbrauch, die Wärmeabgabe und die Prüfzeit zu verringern und so die Gesamtkosten zu reduzieren.

Durch Task-Parallelität und andere Programmiertechniken können Softwareentwickler die Leistung der Multicore-Verarbeitung voll ausnutzen. Entwickler, denen diese Techniken bekannt sind, können Applikationen für die Zukunft vorbereiten. Der parallele Charakter der grafischen Entwicklungsumgebung LabVIEW ermöglicht Entwicklern, die Anwendungen von morgen effektiv zu erstellen.