Academic Über NI Veranstaltungen NI Developer Zone Support Lösungen Online Store Kontakt MyNI

Dokumententyp: Tutorium
Von NI unterstützt: Ja
Veröffentlichungsdatum: 01.12.2008


Feedback


Ja Nein

Ähnliche Kategorien

Thematisch verwandte Links - Developer Zone

Thematisch verwandte Links - Products and Services

Optimierung von Kompilierzeiten für LabWindows/CVI mit vorkompilierten Headern

0 Bewertung(en) | 0.00 von 5
Sprache | Drucken | PDF

Einleitung

Große Projekte bestehen oftmals aus mehreren Quelldateien mit den gleichen Header-Dateien. Unter Umständen macht die Zeit, die der Compiler benötigt, um die Header-Dateien wieder und wieder zu verarbeiten, einen Großteil der Zeit aus, die insgesamt zur Erstellung des Projekts erforderlich ist. Um die Entwicklungszeit zu verkürzen, ermöglicht LabWindows/CVI 9.0 das Vorkompilieren von Headern. Der kompilierte Code wird in einer Datei gespeichert und bei späteren Kompiliervorgängen mit Programmcode kombiniert, der sich noch in der Entwicklung befindet. Die erste Kompilierung, mit der die vorkompilierte Header-Datei erstellt wird, dauert etwas länger als nachfolgende Kompiliervorgänge. Diese gehen dann aber umso schneller, da nur modifizierte Header-Dateien erneut kompiliert werden müssen.


Anders ausgedrückt könnte man einen vorkompilierten Header auch als Cache von Header-Dateien bezeichnen. Der Compiler kann einen Satz von Header-Dateien einmal analysieren und kompilieren. Die Ergebnisse stehen dann allen Modulen zur Verfügung, die diese benötigen.

Verwendung vorkompilierter Header

Header-Dateien enthalten manchmal große Mengen an Quellcode (z. B. die Header-Datei windows.h). Anstatt Header-Dateien wiederholt zu kompilieren, kann eine Prefix-Header-Datei verwendet werden, die auf häufig genutzte Header-Dateien verweist.


Wenn LabWindows/CVI das nächste Mal dieses Projekt kompiliert, wird zuerst die Prefix-Header-Datei kompiliert, der resultierende vorkompilierte Header mit der Endung .pch in cvibuild.xxx gespeichert und anschließend die übrigen Dateien kompiliert. In den darauffolgenden Kompilierungen lädt LabWindows/CVI die vorkompilierte Header-Datei anstelle der in der Prefix-Header-Datei aufgelisteten Header-Dateien.


Folgende Schritte müssen ausgeführt werden, um vorkompilierte Header in einem LabWindows/CVI-Projekt zu nutzen:

  1. Erstellen und speichern Sie eine Prefix-Header-Datei.
    Alternativ kann auch die Prefix-Header-Datei cviincludes.h im Verzeichnis cvi\include verwendet werden. Sollen an der Datei cviincludes.h Änderungen vorgenommen werden, müssen Sie eine Kopie der Datei speichern und diese bearbeiten.
  2. Integrieren Sie die Prefix-Header-Datei ins LabWindows/CVI-Projekt.
    Verwenden Sie die Datei cviincludes.h unverändert, muss sie nicht ins Projekt aufgenommen werden.
  3. Aktivieren Sie die Option Compile with precompiled include file im Bereich Build Options.
  4. Wählen Sie die gewünschte Prefix-Header-Datei aus dem Drop-down-Menü.
  5. Klicken Sie auf OK, um die Änderungen zu speichern und schließen Sie das Dialogfeld Build Options.

Optimierung der Leistung vorkompilierter Header

Vorkompilierter Programmcode eignet sich zur Verkürzung der Kompilierzeit während des Entwicklungsprozesses, vor allem dann, wenn:

  • Sie immer große Mengen an Code verwenden, die sich nicht oft ändern.
  • Ihr Programm mehrere Module umfasst, die alle einen Standardsatz an include-Dateien verwenden. In diesem Fall können alle include-Dateien in einen vorkompilierten Header kompiliert werden.

Der relative Overhead, der durch das Schreiben und Lesen in vorkompilierten Header-Dateien entsteht, ist auch für relativ umfangreiche Header-Dateien eher gering. Meist kostet es nicht viel, eine vorkompilierte Header-Datei zu schreiben, selbst wenn diese letztendlich nicht genutzt wird. Wird sie jedoch genutzt, sorgt sie so gut wie immer für eine wesentlich kürzere Kompilierzeit. Trotz der schnelleren erneuten Kompilierung eignet sich die Verarbeitung vorkompilierter Header kaum für Quelldateien, die auf Sätze unterschiedlicher Header zugreifen. Der größte Nutzen ergibt sich, wenn mehrere Quelldateien dieselbe vorkompilierte Header-Datei verwenden. Je mehr Quelldateien dieselbe vorkompilierte Header-Datei verwenden, desto weniger Platz wird auf der Festplatte verbraucht. Durch die gemeinsame Nutzung wird der Nachteil großer vorkompilierter Header-Dateien minimiert und es können gleichzeitig wesentlich schnellere Kompilierzeiten erreicht werden.

Da die Kompilierzeit, die durch den Einsatz vorkompilierter Header eingespart wird, von der Größe der integrierten Header-Dateien und der Größe der Quelldateien abhängt, muss man etwas experimentieren und möglicherweise kleine Änderungen am Quellcode vornehmen, um die vorkompilierten Header optimal zu nutzen.

Verwaltung von Programmcode

Um bei großen Projekten den maximalen Nutzen aus vorkompilierten Headern zu ziehen, sollte der Programmcode in mehreren Bibliotheken/Codemodule/DLLs organisiert und dann jede Bibliothek mit einem Satz an vorkompilierten Headern konfiguriert werden.

Darüber hinaus werden folgende Schritte empfohlen, wenn eine Prefix-Header-Datei verwendet wird:

  • Passen Sie die Prefix-Header-Datei an die Anforderungen des jeweiligen Projekts an. Ergänzen und entfernen Sie Header-Dateien nach Bedarf. Fügen Sie der vorkompilierten Header-Datei zeit-/kompilierintensive Header hinzu. Zeit-/kompilierintensive Header sind solche, die eine ganze Reihe weiterer Header aufrufen. Ergänzen Sie Header, die aus vielen verschiedenen Dateien integriert wurden, auch wenn sie nicht sehr zeit-/kompilierintensiv sind.
  • Wird beispielsweise eine Kopie der Datei cviincludes.h verwendet und die Datei enthält Header-Dateien, die Sie für Ihr Projekt nicht brauchen, entfernen Sie diese Header-Dateien, um die Geschwindigkeit der ersten Kompilierung zu erhöhen und die Dauer für das Laden der vorkompilierten Header-Datei zu verkürzen.

     

    Hinweis: Nehmen Sie keine Änderungen direkt in der Datei cviincludes.h vor. Machen Sie eine Kopie der Datei cviincludes.h und ändern Sie diese.

  • Verwenden Sie in den vorkompilierten Headern keine Dateien, die sich oft ändern (wie etwa die automatisch generierte User-Interface-Header-Datei). Andernfalls kommt es jedes Mal, wenn ein Header in der vorkompilierten Header-Datei geändert wurde, zu einer vollständigen Neukompilierung.
  • Beachten Sie, dass manche Header-Dateien in einer bestimmten Reihenfolge kompiliert werden müssen.


So muss LabWindows/CVI die Datei windows.h beispielsweise vor allen anderen Header-Dateien kompilieren. Kommt windows.h in einer Anwendung zunächst nicht zum Einsatz, kann die entsprechende Datei aus der Prefix-Header-Datei entfernt werden, um die Kompilierzeit zu verkürzen. Wenn windows.h entfernt wird, kann es allerdings später nicht mehr zur Quelldatei hinzugefügt werden, da die Quelldateien nach den vorkompilierten Headern kompiliert werden. In diesem Fall muss sie wieder in die Prefix-Header-Datei integriert werden, um die Präzedenz zu wahren und Compiler-Fehler zu vermeiden.

Leistungsvergleich von Compilern

Neben der Unterstützung von vorkompilierten Headern wurde der LabWindows/CVI-Compiler in LabWindows/CVI 9.0 verbessert, um Engpässe zu vermeiden.


Folgendes Diagramm zeigt einen Leistungsvergleich von neun internen Prüfanwendungen.

Diese Anwendungen wurden in LabWindows/CVI 8.5, in LabWindows/CVI 9.0 und in LabWindows/CVI 9.0 unter Einsatz von vorkompilierten Headern kompiliert.


Folgendes Diagramm zeigt einen Leistungsvergleich verschiedener Anwendungen von Entwicklern, die mit LabWindows/CVI arbeiten.y.

 

Basierend auf den oben genannten Leistungsvergleichen werden die meisten LabWindows/CVI-Anwendungen mit der Version 9.0 schneller kompiliert als mit der Version 8.5. Am meisten Zeit spart man allerdings mit der Verwendung von vorkompilierten Headern unter LabWindows/CVI 9.0.

 

Weiterführende Informationen

Evaluierung von LabWindows/CVI

Newsletter für LabWindows/CVI-Entwickler

Abonnieren Sie den vierteljährlich erscheinenden Newsletter – informieren Sie sich mithilfe von Tutorien, profitieren Sie von Tipps und Tricks und schlagen Sie selbst Themen für die nächsten Ausgaben vor.

0 Bewertung(en) | 0.00 von 5
Sprache | Drucken | PDF

AGB
Dieses Tutorium ("Tutorium") wurde von National Instruments ("NI") entwickelt. Auch wenn National Instruments dieses Tutorium technisch unterstützt, ist es jedoch möglich, dass dieses Tutorium nicht umfassend getestet und überprüft wurde. NI übernimmt weder Garantien bezüglich der Qualität des Tutoriums noch bezüglich der weiteren technischen Unterstützung neuer Versionen ähnlicher Produkte und Treiber. DIESES TUTORIUM WIRD IM "IST-ZUSTAND" ZUR VERFÜGUNG GESTELLT UND NI ÜBERNIMMT KEINERLEI GARANTIEN. AUSFÜHRLICHERE ERLÄUTERUNGEN ZU ANDEREN EINSCHRÄNKUNGEN ENTNEHMEN SIE BITTE DEN NUTZUNGSBEDINGUNGEN AUF NI.COM (http://ni.com/legal/termsofuse/unitedstates/us/).