Leistungs- und Geschwindigkeitssteigerung von LabVIEW-Projekten Dipl.-Ing. Sebastian F. Kleinau Applikationsingenieur
Agenda 1. Einführung 2. Hilfreiche Werkzeuge zur Codeanalyse 3. Benchmarks für LabVIEW-VIs 4. Speichermanagement in LabVIEW 5. Die Ausführung von VIs und ihre Tücken 6. R&D-Expertenwissen
1. Einführung Werkzeuge zur Code-Analyse Erkennen des Optimierungsbedarfs Optimierung des Speicherverbrauchs Optimierung der Geschwindigkeit
1.1 Erkennen des Optimierungsbedarfs Applikation ist träge Gewünschte Iterationsfrequenzen werden nicht erreicht Speicherbedarf nimmt kontinuierlich zu Hardware-Datenpuffer laufen über (AI/DI) bzw. leer (AO/DO)
1.2 Wahl eines performanten Algorithmus Speicher- und Laufzeitoptimierung kann die Verwendung eines effizienten Algorithmus nicht ersetzen! Beispiel: Kreuzworträtsellöser _ L R I _ NI LabVIEW Virtual User Group: Tips and Tricks to Increase LabVIEW Performance and Speed http://zone.ni.com/wv/app/doc/p/id/wv-1814
Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo 1.2 Wahl eines performanten Algorithmus Vergleiche mehrerer Code-Varianten
1.3 Identifizierung der Engpässe Die 80/20-Regel der Softwareoptimierung 80 % der Ausführungszeit wird in 20 % des Codes verbraucht Optimierung auf die Engpässe konzentrieren Speicher- und Zeit-Profiling zur Erkennung der relevanten VIs
1.3 Identifizierung der Engpässe VI-Profiling durch in LabVIEW integriertes Werkzeug LabVIEW-Hilfe» Grundlagen» Leistungs- und Speichermanagement» Allgemeines» Verwendung des Fensters Profil Leistung und Speicher
2. Hilfreiche Werkzeuge zur Codeanalyse VI Analyzer Toolkit Parallelisierbare FOR-Schleifen suchen
2.1 VI Analyzer Toolkit Automatisierte Codeanalyse Zeigt z. B. fehlendes Timing oder unkluge Verwendung von String- und Arrayfunktionen an LabVIEW VI Analyzer Toolkit Overview, http://zone.ni.com/devzone/cda/tut/p/id/3588
Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo 2.1 VI Analyzer Toolkit Automatische Codeanalyse
2.2 Parallel ausführbare Schleifen suchen Compiler LV2010 hier stark optimiert Ermöglicht bei geeignetem Code die Parallelisierung von FOR-Schleifen Leistungsvermögen mit parallelen For-Schleifen verbessern, http://zone.ni.com/devzone/cda/tut/p/id/10215
3. Benchmarks für LabVIEW-VIs Einfaches Test-Framework Desktop Execution Trace Toolkit Real-Time Execution Trace Toolkit
3.1 Einfaches Test-Framework Standardarchitektur zur Untersuchung des Zeitverhaltens Genauigkeit wird durch hohe Iterationszahlen verbessert
Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo 3.1 Einfaches Test-Framework Verwenden von VI-Templates Vergleich zweier Codebeispiele
3.2 Desktop Execution Trace Toolkit Protokolliert zur Laufzeit eines VIs Ereignisse wie z. B. Speicherallokationen, SubVI-Aufrufe, Referenzlecks Advanced LabVIEW Debugging: Profiling VI Execution with the Desktop Execution Trace Toolkit http://zone.ni.com/devzone/cda/tut/p/id/8083
Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo 3.2 Desktop Execution Trace Toolkit Beispiel aus der LabVIEW-Beispielsuche: Desktop Execution Trace Toolkit.lvproj
3.3 Real-Time Execution Trace Toolkit Grafische Darstellung von Laufzeit und Speicherallokierung Debug and Optimize Performance with the Real-Time Execution Trace Toolkit http://zone.ni.com/devzone/cda/pub/p/id/221
4. Speichermanagement in LabVIEW Typische Fehler Anzeige von Speicherallokationen im Blockdiagramm In-Place-Struktur und weitere Überlegungen
4.1 Typische Fehler Kontinuierliche Neuallokierung von Speicher
4.1 Typische Fehler Mehrfache automatische Typenumwandlung (Coercion)
4.2 Anzeige von Speicherallokationen Häufig unnötige Datenkopien durch Verzweigung Visualisierung durch entsprechendes Werkzeug Managing Large Data Sets in LabVIEW http://zone.ni.com/devzone/cda/tut/p/id/3625
4.3 In-Place-Struktur und weitere Überlegungen Große, zusammengesetzte Datentypen erhöhen die Übersicht Datenextraktion benötigt aber zusätzlichen Speicher In-Place-Struktur kann hier Abhilfe schaffen Getrennte Datenstrukturen sind oftmals leistungsfähiger Zentrale Vorhaltung der Daten z. B. durch mehrere FGVs Manage Memory in LabVIEW Using a New Block Diagram Structure http://zone.ni.com/devzone/cda/tut/p/id/6211
Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo 4.3 Array vs. diskrete Speicherung Demonstration des Array-Verwaltungsoverheads
5. Die Ausführung von VIs und ihre Tücken Übertragungsgeschwindigkeiten verschiedener Mechanismen Lokale und globale Variablen Funktionale globale Variablen (FGVs) Queues Nicht immer ist der schnellstmögliche Weg, Daten auszutauschen, auch der sicherste Race Conditions! Tutorial: Local Variable, Global Variable, and Race Conditions http://zone.ni.com/devzone/cda/tut/p/id/7585
5. Die Ausführung von VIs und ihre Tücken Minimierung des Speicherverbrauchs und Maximierung der Geschwindigkeit schließen sich häufig gegenseitig aus. Ablaufinvariante * SubVIs werden mehrfach parallel instanziiert Parallele Aufrufe des SubVIs behindern sich so nicht gegenseitig Dafür zusätzliche Instanzen des VI-Datenbereichs im Speicher Dynamischer Aufruf von SubVIs Weniger Speicherverbrauch, wenn SubVIs nur bei Bedarf geladen werden Festplattenzugriff beim Laden notwendig * engl.: reentrant Trainingskurs LabVIEW Performance Guide (deutsch): http://sine.ni.com/nips/cds/view/p/lang/de/nid/207399
5. Die Ausführung von VIs und ihre Tücken Neues Feature in LabVIEW 2010: SubVI-Inlining Injiziert SubVI-Code beim Kompilieren direkt in das aufrufende VI kein Overhead durch SubVI-Aufrufe mehr dafür zusätzlicher Speicherbedarf, Executables werden etwas größer Einschränkungen: Sinnvoll nur für ausführungsinvariante VIs (keine FGVs!) Kein Debugging und keine automat. Fehlerbehandlung Kann Codelesbarkeit deutlich verbessern LabVIEW 2010 Help» Fundamentals» Managing Performance and Memory» Concepts» VI Execution Speed
Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo Demo 5. Die Ausführung von VIs und ihre Tücken Vergleich und Optimierung eines SubVI-Aufrufs in Schleifen
6. R&D-Expertenwissen Datenspeicherung in Variant-Attributen Data References Datenverarbeitung auf der Grafikkarte
6.1 Datenspeicherung in Variant-Attributen Sehr schneller Weg, verschiedenste Datentypen über eine Leitung zu übertragen Verwendung z. B. bei Handler-Queues aus einem Cluster mit Kommando-Enum und einen Variant als Datencontainer
6.2 Datenreferenzen? Seit LabVIEW 2009 verfügbar Datenreferenzen können an SubVIs übergeben werden Datenbearbeitung mit InPlace-Strukturen möglich Fragmented Array Library v1.1.1, http://decibel.ni.com/content/docs/doc-9321
6.3 Datenverarbeitung auf der Grafikkarte Recheneinheiten der Grafikkarte können zur Leistungssteigerung bei komplexen Berechnungen in LabVIEW eingebunden werden Verwendet die NVIDIA CUDA -Schnittstelle LabVIEW GPU Computing http://decibel.ni.com/content/docs/doc-6064
Weiterführende Informationen: Technischer Support und Trainingskurse: +49 89 7413130 (D) +43 662 45799-0 (A) +41 56 2005151 (CH) http://ni.com/training/d Weitere Informationen zu diesem Thema: Trainingskurs LabVIEW Performance Guide (deutsch): http://sine.ni.com/nips/cds/view/p/lang/de/nid/207399 Darren s Nuggets: http://decibel.ni.com/content/docs/doc-4002 NI LabVIEW Virtual User Group: Tips and Tricks to Increase LabVIEW Performance and Speed: http://zone.ni.com/wv/app/ doc/p/id/wv-1814
Weiterführende Informationen: Linksammlung NI LabVIEW Virtual User Group: Tips and Tricks to Increase LabVIEW Performance and Speed: http://zone.ni.com/wv/app/doc/p/id/wv-1814 LabVIEW-Hilfe» Grundlagen» Leistungs- und Speichermanagement» Allgemeines» Verwendung des Fensters Profil Leistung und Speicher LabVIEW VI Analyzer Toolkit Overview: http://zone.ni.com/devzone/cda/tut/p/id/3588 Leistungsvermögen mit parallelen For-Schleifen verbessern: http://zone.ni.com/devzone/cda/tut/p/id/10215 Advanced LabVIEW Debugging: Profiling VI Execution with the Desktop Execution Trace Toolkit: http://zone.ni.com/devzone/cda/tut/p/id/8083 Debug and Optimize Performance with the Real-Time Execution Trace Toolkit: http://zone.ni.com/devzone/cda/pub/p/id/221 Managing Large Data Sets in LabVIEW: http://zone.ni.com/devzone/cda/tut/p/id/3625 Manage Memory in LabVIEW Using a New Block Diagram Structure: http://zone.ni.com/devzone/cda/tut/p/id/6211 LabVIEW 2010 Help» Fundamentals» Managing Performance and Memory» Concepts» VI Execution Speed Tutorial: Local Variable, Global Variable, and Race Conditions: http://zone.ni.com/devzone/cda/tut/p/id/7585 Fragmented Array Library v1.1.1: http://decibel.ni.com/content/docs/doc-9321 LabVIEW GPU Computing: http://decibel.ni.com/content/docs/doc-6064