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 Multithreading 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 Geschwindigkeit 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