Multithreading in Agilent Vee Pro 9.0 - All

Transcrição

Multithreading in Agilent Vee Pro 9.0 - All
Messtechnik
Das „Cockpit für Mess-Systeme“ arbeitet jetzt auch parallel
Multithreading in Agilent VEE Pro 9.0
Agilent VEE Pro ist für vielfältige Anwendungen geeignet, von der einfachen Instrumenten-Steuerung über Programme
für ganze Mess- und Steuer-Abläufe bis hin zum „Cockpit“ eines komplexen Test-Systems. In der im November 2008
vorgestellten Version 9.0 werden jetzt auch Multithreading- und Multicore-Technologien unterstützt.
Die grafische Software-EntwicklungsUmgebung Agilent VEE Pro wurde ursprünglich von Hewlett-Packard als HPVEE eingeführt. Die Philosophie dieser
Software war von Anfang an eine sehr
einfache und intuitive Bedienung. Denn
programmiert wird weitgehend grafisch
durch Verdrahten von Funktions-Objekten.
Es entsteht eine ablaufdiagramm-artige
Struktur, die speziell dem Techniker und
Ingenieur, aber auch dem Software-Entwickler sehr entgegenkommt und auch
nach langer Zeit wieder nachvollziehbar
ist. Trotz des einfachen Bedienkonzepts
bietet VEE Pro enorme Möglichkeiten für
Messtechnik und Test. Dazu trägt zum
einen das integrierte MATLAB Script bei,
zum anderen die VEE Pro-eigenen, umfangreichen Funktionen.
˘ AUTOR
Ernst Bratz, Meilhaus Electronic,
nach Unterlagen von Vincent Foo,
Abteilung Basic Instruments,
Agilent Technologies, Inc.
Bild 1: Ablauf eines Raketenstarts
als gedachtes VEE Programm
– sequentiell.
Bild 2: Ablauf eines Raketenstarts als
gedachtes VEE Programm – Threads.
Mit der heutigen Technologie, die zunehmend von der Herausforderung geprägt
wird, die Leistung von Mess-Anwendungen noch weiter zu steigern, versucht man
mit vielerlei Methoden die Performance
von Software-Applikationen zu verbessern. Eine dieser Methoden ist das Multithreading, dessen Wurzeln in der Parallelverarbeitung, dem sogenannten Parallel
Computing liegen.
Multithreading
Seit 1958, als erstmals Parallelitätsberechnungen in Computern ausgeführt wurden
(IBM-Mitarbeiter John Cocke und Daniel
Slotnick), gewinnt die Parallelverarbeitung
in Rechnern immer mehr an Bedeutung
und bedient sich heute der Vorteile der
Multiprozessor-Technologie, die vor etwa
50 Jahren entwickelt wurde. Die Nutzung
der Parallelität in einem ­Einzelprozess
wird als Multi­threading bezeichnet, einem
Konzept zur Problemlösung, bei dem ein
Task (d. h. ein Block von abzuarbeitenden
Aufgaben) in mehrere Threads (Bearbeitungsstränge) unterteilt wird, die zur gleichen Zeit parallel abgearbeitet werden
können, anstatt den kompletten Task linear auszuführen. Die Geschwin­digkeit
eines einzelnen, auf einem Einzelprozessor
ablaufenden Prozesses ist durch verschiedene Faktoren begrenzt. Für eine noch
schnellere Verarbeitung dieses Prozesses
ist es daher notwendig, ihn in ­Threads
aufzuteilen und mit mehreren Prozesso˘
ren parallel zu verarbeiten.
Messtechnik
Doch bevor man beginnt, mit Multithreading in Agilent VEE 9.0 zu arbeiten, sollte
man wissen, wie Multithreading im Einzelnen funktioniert. Der Programmierer
muss sich zuerst darüber im Klaren sein,
in welche Subtasks seine Softwarelösung
am sinnvollsten unterteilt bzw. aufgegliedert werden kann. Besteht die Aufgabe
beispielsweise darin, mit der Softwarelösung einen Raketenstart zu programmieren, wären folgende Subtasks denkbar:
Silo öffnen (Open Silo), Startschlüssel einstecken (Insert Launch Keys), Batterien
aktivieren (Activate Batteries), Zielsuche
einschalten (Guidance On), Antrieb starten (Start Engine) und Abheben (Lift Off).
Bild 1 zeigt wie eine sequenzielle, d. h. lineare Programmierung in Agilent VEE
aussehen würde.
Anschließend müsste der Programmierer
die Subtasks unter Code-Gruppen zusammenfassen und unabhängige Codes ermitteln, zwischen denen keinerlei Abhängigkeiten bestehen. Im Beispiel mit dem
Raketenstart könnte man sagen, dass es
zwei Abhängigkeiten gibt: „Lift off“ kann
nicht gestartet werden, wenn „Start Engine“
nicht abgeschlossen ist und die Voraussetzung für „Start Engine“ ist, dass zuerst alle
anderen Tasks oben abgeschlossen sind. Da
„Open Silo“, „Insert Launch Keys“, „Activate
Batteries“ und „Guidance On“ voneinander
unabhängige Tasks sind, die in keiner Weise
von den Dateneingängen oder -ausgängen
anderer Subtasks abhängig sind, kann bei
ihnen bedenkenlos ein Multithreading
durchgeführt werden (Bild 2).
Deadlocks vermeiden
Multithreading ist jedoch nicht bei allen
Applikationen möglich. Soll mit der Softwarelösung z. B. programmiert werden,
dass ein Roboter eine Straße überquert,
ergäben sich folgende Subtasks: Kopf nach
links drehen, Kopf nach rechts drehen,
Stopp, Verkehrslage analysieren, Straße
überqueren. Dabei wäre jeder der Subtasks bestimmten Abhängigkeiten unterworfen (Bild 3).
Der Versuch, einen Subtask bei dem Abhängigkeiten vorliegen, in einen Multithread einzubinden, würde ohne gezielte
Steuerungsprozeduren zu einem Deadlock
(dt. „Verklemmung“) führen. Ein einfaches
Beispiel für einen Deadlock ist, wenn Pro-
56
Bild 3: Beispiel für einen nicht in
parallele Threads zerlegbaren Prozess.
Bild 4: Threads beim Steuern von Instrumenten.
Bild 5: Programm in VEE Pro 9.0 mit mehreren
Threads.
Bild 6: ThreadObject
erstellen.
zess A auf Prozess B wartet, und Prozess
B gleichzeitig auf Prozess A – das Resultat
ist eine Unendlichschleife. Aktuelle Echtzeitsoftware- und Betriebssysteme verwenden Synchronisierungsverfahren, wie
etwa File Locking (Sperren von Dateien),
Semaphore (Datenstrukturen zur Synchronisation von Prozessen), Mutex (wechselseitiger Ausschluss) und Message Passing
(Prozesse senden sich gegenseitig Nachrichten zu), um ein Multithreading von
abhängigen Prozessen zu ermöglichen
und ein solches Ereignis zu verhindern, das
in der Informatik auch unter der Bezeichnung Race Condition (dt. Wettlaufsituation) bekannt ist. Eine einfache Umschreibung für die Synchronisierung wäre z. B.
ein Zeitplan zur Steuerung der gemeinsamen Nutzung einer Bahnstrecke, ohne den
es auf dieser Strecke zur Kollision von Zügen kommen kann.
Reale Messapplikationen
Wie könnte nun aber durch Multithreading die Leistung von realen Messapplikationen verbessert werden? Ein wesentlicher Vorteil von Multithreading besteht
darin, dass mehrere Instrumente gleichzeitig angesprochen werden können. Bei
der folgenden Lösung gibt es z. B. 5 Instrumente, die jeweils 10 s zur Initialisierung
und Kalibrierung benötigen, bevor die
Messung gestartet werden kann (Bild 4).
Würden die Instrumente in linearer Folge
nacheinander angesprochen, läge die Zeitspanne bis zur Messung bei 50 s. Läuft die
Verarbeitung hingegen parallel (über
­Multithreading), können alle 5 Instrumente innerhalb von insgesamt 10 s initialisiert
werden.
Mit den vorherigen Versionen der Software VEE Pro kann der Anwender über
sogenannte Benutzerobjekte (User Objects) ganz einfach funktionstypische
Teilprozeduren (Sub-Procedures) erstellen. In der neuen Version können diese
Benutzerobjekte jetzt zu Thread-Objekten erweitert werden, in denen der Programmierer seine nicht-abhängigen
Thread-Sicherheitscodes platzieren
kann. Ein einfaches Beispiel in VEE Pro
9.0 ist die Erstellung eines Vergleichs von
2 Thread-Objekten und von 2 Benutzerobjekten, die sich jeweils für 10 s in Warteposition befinden, und sie dann zu
verknüpfen (Bild 5). Die Erstellung von
Thread-Objekten in VEE ist durch Dragand-Drop ganz einfach wie in Bild 6 zu
sehen ist.
Pipelining
Ein weiterer Prozess, der vom Multithreading profitieren kann, ist das Pipelining.
Hier werden Teilprozesse eines Dateneingangsstroms in eine Warteschlange gestellt und die Ausgabe eines einzelnen
Teilprozesses wird kontinuierlich in den
nächsten Teilprozess eingeleitet, während ein weiterer Dateneingang von der
Datenstrom-Warteschlange aufgenommen wird. ( jj)
˘ infoDIRECT
501ei0109
˘ Link zu Meilhaus Electronic
www.elektronik-industrie.de
elektronik industrie 1/2 - 2009