LabVIEW skaliert Programme automatisch, um mehrere Prozessoren auf High-End-Rechnersystemen nutzen zu können. Dazu wird die Anzahl der verfügbaren Cores festgestellt und der Anwender bei der Entwicklung einer größeren Zahl von Threads unterstützt. LabVIEW erstellt beispielsweise acht Threads für die Programmausführung, wenn es auf einem Computer mit acht Prozessorkernen ausgeführt wird.
Wird ein Single-Core-Rechensystem durch ein Multicore-System ersetzt, das Verarbeitungseinheiten mit denselben Taktraten wie beim Single-Core-System betreibt, verkürzt sich die Ausführungszeit von LabVIEW-Programmen. Im Idealfall erhöht sich die Geschwindigkeit der Programmausführung um einen Faktor, welcher der Anzahl von Cores eines Multicore-Systems entspricht (z. B. vervierfacht sich die Geschwindigkeit auf einem Quad-Core-System). Jedoch verhindert Overhead bei der Kommunikation zwischen Threads und Cores diese ideale Verbesserung der Geschwindigkeit. Ist das betreffende LabVIEW-Programm komplett sequenziell und läuft auf einem einzelnen Prozessor, benötigt es auf einem Prozessor, den es sich mit anderer Software teilt, weniger Zeit, wodurch auch die Ausführungszeit verkürzt wird. Ist das betreffende Programm komplett parallel und besteht aus Tasks derselben Größe ohne Datenabhängigkeit, lässt sich die bestmögliche Verbesserung der Ausführungszeit erzielen.
Die physische Distanz zwischen den Prozessoren und die Qualität der Verbindungen haben aufgrund des Kommunikations-Overheads Einfluss auf die Ausführungzeit von LabVIEW-Programmen. Mehrere Prozessoren auf separaten Chips zeigen höhere Latenz bei der Kommunikation zwischen Prozessoren, als Prozessoren auf einem einzigen Chip. Daraus ergibt sich ein größerer Kommunikations-Overhead, der die Ausführungszeit von LabVIEW verlangsamt. In Abbildung 1 ist die Latenz beim System mit zwei Prozessoren (zwei Sockets) auf der linken Seite höher als auf dem einzelnen Chip mit Dual-Core-Prozessor, der rechts abgebildet ist.
Abbildung 1: Vergleich eines Dual-Prozessor- mit einem Dual-Core-Prozessor-System
Die Ausführungszeit von LabVIEW-Programmen auf einem Multicore-Computer hängt in gleichem Maße vom Programm wie auch vom Computer ab, auf dem es läuft. Das Programm muss so geschrieben sein, dass es von den Vorteilen der Multicore-Systeme profitiert. Der Grad der Programmparallelität ist von großer Bedeutung, ebenso die Aufteilung (Berechnungen im Verhältnis zur Kommunikation) und die Lastverteilung. Ein großer Teil bestehenden G-Codes wurde zwar für die sequenzielle Ausführung geschrieben, jedoch ist diese Art Code aufgrund der Datenflussprogrammierung bis zu einem gewissen Grad parallel. Wie bereits erwähnt, zeigen Tests gängiger Strukturen von LabVIEW-Programmen durchschnittlich eine 25- bis 35-prozentige Verkürzung der Ausführungszeit, wenn sie von einem Single- auf ein Multicore-System migriert werden. Die Eigenschaften des jeweiligen Programms können allerdings zu erheblichen Abweichungen von dieser Schätzung führen. Die Optimierung eines LabVIEW-Programms für eine Multicore-Umgebung kann die Ausführungszeit wesentlich verkürzen, wenn mit einem Multicore-Rechner gearbeitet wird.
G-Code so zu organisieren, dass die Ausführungszeit verkürzt wird, ist kompliziert, wenn man die Hardware nicht kennt, auf der das Programm ausgeführt wird. Damit die optimale Ausführungszeit erreicht wird, ist es unbedingt notwendig, das System zu verstehen, auf dem ein Multicore-Programm läuft. Multicore-Programmiertechniken erfordern für Systeme mit einer unbekannten Anzahl von Cores eine allgemeinere Methode. Diese gewährleistet ein gewisse Verkürzung der Ausführungszeit auf den meisten Multicore-Maschinen, verhindert aber möglicherweise die maximale Geschwindigkeit auf einem spezifischen Gerät. Die hardwarespezifische Abstimmung von LabVIEW-Programmen kann recht zeitaufwändig sein, ist aber nicht immer notwendig. Um ein System mit acht Cores voll auszunutzen, können parallele Programmiertechniken eingesetzt werden, wie etwa Datenparallelität und Pipelining. Darüber hinaus profitieren Anwender von der Anzahl von Cores in einem System, dem Core-Layout (zwei Dual-Cores oder ein Quad-Core), deren Verbindung, der Speicherarchitektur sowie von bekannten Fehlern, und erreichen so die kürzeste auf Multicore-Systemen mögliche Programmausführung.
Weitere Informationen über parallele Programmiertechniken stehen hier zur Verfügung:
Probleme bei der Umsetzung von Parallelität können in verschiedenen Softwareebenen auftreten. In traditionellen Programmiersprachen wie C stellt dies eine besondere Herausforderung dar. Im Gegensatz dazu profitiert die LabVIEW-Programmierung von einer Multicore-fähigen Entwicklungsumgebung. Um diese Leistungsgewinne zu realisieren, hat die Software vier Schichten, die im Hinblick auf ihre Multicore-Fähigkeit evaluiert werden müssen: Entwicklungswerkzeug, Bibliotheken, Gerätetreiber und Betriebssystem. Sind diese Schichten nicht bereit für Multicore, sind Leistungszuwächse eher unwahrscheinlich, die Leistung könnte sogar noch absinken. Tabelle 1 zeigt, wie LabVIEW für alle Schichten Multicore-fähige Software bereitstellt.
Softwarekomponenten | Bedeutung von „Multicore-Fähigkeit“ | LabVIEW-Support |
Entwicklungswerkzeug | Support für ein beliebiges Betriebssystem; ermöglicht korrektes Threading und Optimierung | Beispiel: Multithreading-Fähigkeit von LabVIEW und Strukturen, die Optimierung erlauben |
Bibliotheken | Thread-sichere, ablaufinvariante Bibliotheken | Beispiel: Analysebibliotheken |
Gerätetreiber | Treiber, die für eine optimale Multithreading-fähige Leistung entwickelt wurden | Beispiel: Treibersoftware NI-DAQmx |
Betriebssystem | Betriebssystem unterstützt Multithreading und Multitasking und kann Tasks gleichmäßig verteilen | Beispiel: Support für Windows, Mac OS, Linux® und echtzeitfähige Betriebssysteme |
Serie zu den „Grundlagen der Multicore-Programmierung“
Linux® ist in den USA und anderen Ländern ein eingetragenes Warenzeichen von Linus Torvalds.