Intel® FPGA SDK für OpenCL™ – Support-Center
Produktabkündigungshinweis
Intel stellt Intel® FPGA SDK für OpenCL™ ein. Weitere Informationen finden Sie in der Benachrichtigung über die Einstellung von Produkten (PDN2219).
Die Supportseite für Intel® FPGA SDK für OpenCL enthält Informationen zum Emulieren, Kompilieren und Profilieren Ihres Kernels. Es gibt auch Richtlinien zur Optimierung des Kernels sowie Informationen zum Debuggen des Systems, während die Hostanwendung ausgeführt wird. Diese Seite ist basierend auf der Entwicklungsplattform in zwei Hauptkategorien unterteilt: Kernel-Entwickler für FPGA und Hostcode-Entwickler für CPUs.
Software-Anforderungen
Sie müssen über Administratorrechte auf dem Entwicklungssystem verfügen, um die für die Entwicklung der Host-Software erforderlichen Pakete und Treiber installieren zu können.
Auf dem Hostsystem muss eines der folgenden unterstützten Windows*- und Linux*-Betriebssysteme ausgeführt werden, die auf der Seite " Betriebssystem-Support" aufgeführt sind.
Entwickeln Sie Ihre Hostanwendung für das Intel® FPGA SDK für OpenCL™ mit einer der folgenden Entwicklungsumgebungen:
Windows-Betriebssysteme
- Intel FPGA SDK für OpenCL
- Board-Support-Package (BSP)
- Microsoft* Visual Studio Professional Version 2010 oder höher.
Linux-Betriebssysteme
- Intel FPGA SDK für OpenCL
- BSP
- RPM (RPM Package Manager; ursprünglich Red Hat Package Manager)
- C-Compiler im Lieferumfang von GCC enthalten
- Perl-Befehl Version 5 oder höher
1. Kernel-Entwickler
SDK-Benutzeroberfläche
Intel® FPGA SDK für OpenCL™ bietet Benutzern zwei Arten der Entwicklungserfahrung. Für Code-Builder sind alle Tools in die GUI integriert, sodass sie den Kernel entwerfen, kompilieren und debuggen können. Auf der anderen Seite sind die Befehlszeilenoptionen für herkömmliche Benutzer.
- GUI/Code-Builder: Momentan nicht verfügbar
- Befehlszeilenoption:
Hier sind einige nützliche Befehle für Kernel-Entwickler:
AOC kernel.cl -o bin/kernel.aocx –board=<board_name>
- Kompiliert kernel.cl Quelldatei in eine FPGA Programmierdatei (kernel.aocx) für das von <board_name> angegebene Board; -o wird verwendet, um den Namen und den Speicherort der Ausgabedatei anzugeben
AOC kernel.cl -o bin/kernel.aocx –board=<board_name> -march=emulator
- Baut eine AOCX-Datei zur Emulation auf, mit der die Funktionalität des Kernels getestet werden kann
AOC -list-boards
- Druckt eine Liste der verfügbaren Boards und Ausgänge
AOC – Hilfe
- Druckt eine vollständige Liste der AOC-Befehlsoptionen und Hilfeinformationen für jede dieser Optionen
AOCL-Version
- Zeigt Versionsinformationen für die installierte Version von Intel FPGA SDK für OpenCL an
AOCL-Installation
- Installiert Treiber für Ihr Mainboard in das aktuelle Host-System
AOCL-Diagnose
- Führt das Testprogramm des Board-Herstellers für das Board aus
AOCL-Programm
- Konfiguriert ein neues FPGA Bild auf dem Mainboard
AOCL-Flash
- Initialisiert die FPGA mit einer angegebenen Startkonfiguration
AOCL-Hilfe
- Druckt eine vollständige Liste der aocl-Befehlsoptionen und Hilfeinformationen für jede dieser Optionen
OpenCL-Spezifikation
Khronos-Kompatibilität
Intel® FPGA SDK für OpenCL™ basiert auf einer veröffentlichten Khronos-Spezifikation und wird von vielen Anbietern unterstützt, die Teil der Khronos-Gruppe sind. Intel FPGA SDK für OpenCL hat den Khronos-Konformitätstestprozess bestanden. Es entspricht dem OpenCL 1.0 Standard und stellt sowohl die OpenCL 1.0 als auch OpenCL 2.0 Header der Khronos Group zur Verfügung.
Aufmerksamkeit: Das SDK unterstützt derzeit nicht alle OpenCL 2.0-APIs (Application Programming Interfaces). Wenn Sie die OpenCL 2.0-Header verwenden und eine nicht unterstützte API aufrufen, gibt der Aufruf einen Fehlercode zurück, der darauf hinweist, dass die API nicht vollständig unterstützt wird.
Die Hostlaufzeit des Intel FPGA SDK für OpenCL entspricht der OpenCL-Plattformschicht und API mit einigen Erläuterungen und Ausnahmen, die im Abschnitt Supportstatus der OpenCL-Funktionen im Intel FPGA SDK für OpenCL-Programmierhandbuch zu finden sind.
Andere verwandte Links:
- Weitere Informationen zu OpenCL finden Sie auf der OpenCL-Übersichtsseite der Kronos Group .
- Den aktuellen Konformitätsstatus finden Sie auf der Seite des Kronos Group Adopter Program .
- Weitere Informationen zum OpenCL 1.0-Standard finden Sie in der OpenCL-Spezifikation von Khronos.
OpenCL-Erweiterungen
Kanäle (I/Os oder Kernel)
Die Intel® FPGA SDK für die OpenCL-Kanalerweiterung™ bietet einen Mechanismus zum Übergeben von Daten an Kernel und zum Synchronisieren von Kernels mit hoher Effizienz und geringer Latenz. Über die folgenden Links finden Sie weitere Informationen zur Implementierung, Verwendung und Emulation von Kanälen:
- Implementieren des Intel FPGA SDK für OpenCL Channels Extension
- Verwenden von Kanälen mit Kernelkopien
- HTML-Bericht: Kernel-Design-Konzepte – Kanäle
- Datenübertragung über Intel FPGA SDK für OpenCL-Kanäle oder OpenCL-Pipes
- Anforderung für mehrere Befehlswarteschlangen in der Channel- oder Pipes-Implementierung
Hinweis: Wenn Sie die Funktionen von Kanälen nutzen möchten, aber Ihr Kernelprogramm mit anderen SDKs ausführen möchten, implementieren Sie OpenCL-Pipes. Weitere Informationen zu Rohren finden Sie im folgenden Abschnitt über Rohre.
Rohre
Intel FPGA SDK für OpenCL bietet vorläufige Unterstützung für OpenCL-Pipe-Funktionen, die Teil der OpenCL-Spezifikation Version 2.0 sind. Sie bieten einen Mechanismus zum Übergeben von Daten an Kernel und zum Synchronisieren von Kernels mit hoher Effizienz und geringer Latenz.
Das Intel FPGA SDK für die OpenCL-Implementierung von Pipes ist nicht vollständig konform mit der OpenCL-Spezifikation Version 2.0. Das Ziel der Pipe-Implementierung des SDK ist es, eine Lösung bereitzustellen, die nahtlos auf einem anderen OpenCL 2.0-konformen Gerät funktioniert. Um Rohre für Intel FPGA Produkte zu ermöglichen, muss Ihr Design bestimmte Anforderungen erfüllen.
Weitere Informationen zur Implementierung von OpenCL-Pipes finden Sie unter den folgenden Links:
- Implementieren von OpenCL Pipes
- Datenübertragung über Intel FPGA SDK für OpenCL-Kanäle oder OpenCL-Pipes
- Anforderung für mehrere Befehlswarteschlangen in der Channel- oder Pipes-Implementierung
Emulator
In einem mehrstufigen Design-Flow können Sie die Funktionalität Ihres OpenCL-Kernels™ bewerten, indem Sie ihn auf einem oder mehreren Emulationsgeräten auf einem x86-64 Windows* oder Linux* Host ausführen. Die Kompilierung des Designs für die Emulation dauert nur wenige Sekunden, um eine .aocx-Datei zu generieren, und ermöglicht es Ihnen, Ihr Design effektiver zu bearbeiten, ohne die langen Stunden durchlaufen zu müssen, die für die vollständige Kompilierung erforderlich sind.
Für Linux-Systeme bietet der Emulator symbolische Debug-Unterstützung. Symbolisches Debugging ermöglicht es Ihnen, die Ursprünge von Funktionsfehlern in Ihrem Kernelcode zu lokalisieren.
Der folgende Link bietet einen Überblick über den Design-Flow für OpenCL-Kernel und veranschaulicht die verschiedenen Phasen, für die Sie Ihren Kernel emulieren können.
Multistep Intel® FPGA SDK für OpenCL Design Flow
Der Abschnitt Emulieren und Debuggen des OpenCL-Kernels im Programmierhandbuch enthält weitere Details zu den Unterschieden zwischen dem Kernelbetrieb auf Hardware und der Emulation.
Andere verwandte Links:
- Emulieren und Debuggen des OpenCL-Kernels
- Emulation von E/A-Kanälen
- Überprüfen der Funktionalität der Host-Laufzeit über Emulation (Windows)
- Überprüfen der Funktionalität der Host-Laufzeit mittels Emulation (Linux)
Optimierung
Mit der Intel® FPGA SDK für OpenCL™ Offline Compiler-Technologie müssen Sie Ihren Kernel nicht ändern, um ihn optimal in eine feste Hardware-Architektur einzufügen. Stattdessen passt der Offline-Compiler die Hardwarearchitektur automatisch an Ihre Kernel-Anforderungen an.
Im Allgemeinen sollten Sie einen Kernel optimieren, der zuerst auf eine einzelne Recheneinheit abzielt. Nachdem Sie diese Recheneinheit optimiert haben, steigern Sie die Leistung, indem Sie die Hardware skalieren, um die restlichen FPGA auszufüllen. Der Hardware-Footprint des Kernels korreliert mit der Zeit, die für die Hardware-Kompilierung benötigt wird. Je mehr Optimierungen Sie mit einem kleineren Platzbedarf (d. h. einer einzelnen Recheneinheit) durchführen können, desto mehr Hardwarekompilierungen können Sie in einer bestimmten Zeit durchführen.
OpenCL-Optimierung für Intel FPGAs
Um die Implementierung Ihres Designs zu optimieren und die maximale Leistung zu erzielen, sollten Sie Ihre theoretische maximale Leistung verstehen und Ihre Grenzen verstehen. Gehen Sie folgendermaßen vor:
- Beginnen Sie mit einer einfachen, bekanntlich guten funktionalen Implementierung.
- Verwenden Sie einen Emulator, um die Funktionalität zu überprüfen.
- Entfernen oder minimieren Sie die Pipelineverzögerungen, die mit dem Optimierungsbericht gemeldet werden.
- Planen Sie den Speicherzugriff für eine optimale Speicherbandbreite.
- Verwenden Sie einen Profiler, um Leistungsprobleme zu debuggen.
Der Profiler gibt mehr Einblick in die Systemleistung, was Ihnen Anweisungen gibt, wie Sie den Algorithmus bei der Nutzung des Speichers weiter optimieren können.
Denken Sie daran, dass für FPGAs umso mehr Unrolling, Parallelisierung und höhere Leistung erreicht werden können, je mehr Ressourcen zugewiesen werden können.
Hilfreiche Berichte und Ressourcen für die Optimierung
Den Benutzern stehen eine Reihe von vom System generierten Berichten zur Verfügung. Diese Berichte geben Einblicke in den Code, die Ressourcennutzung und Hinweise dazu, wo Sie sich konzentrieren sollten, um die Leistung weiter zu verbessern:
- Schleifenanalysebericht eines OpenCL-Designbeispiels
- Überprüfen von Informationen zu Speicherreplikation und Blockaden
- Informationen zur Überprüfung des Bereichs
- HTML-Bericht: Meldungen zu Bereichsberichten
Speicheroptimierung
Das Verständnis von Speichersystemen ist entscheidend, um eine Anwendung mit OpenCL effizient zu implementieren.
Globale Speicherverbindung
Im Gegensatz zu einer GPU kann ein FPGA jede benutzerdefinierte Load-Store-Unit (LSU) erstellen, die für Ihre Anwendung am optimalsten ist. Ihre Fähigkeit, OpenCL-Code zu schreiben, der die idealen LSU-Typen für Ihre Anwendung auswählt, kann daher dazu beitragen, die Leistung Ihres Designs erheblich zu verbessern.
Weitere Informationen finden Sie im Abschnitt Global Memory Interconnect des Intel FPGA SDK für das OpenCL Best Practices Guide.
Lokaler Speicher
Der lokale Speicher ist ein komplexes System. Im Gegensatz zu einer typischen GPU-Architektur, bei der verschiedene Ebenen von Caches vorhanden sind, implementiert ein FPGA den lokalen Speicher in dedizierten Speicherblöcken innerhalb der FPGA. Weitere Informationen finden Sie im Abschnitt "Lokaler Speicher " des Intel FPGA SDK für OpenCL Best Practices Guides.
Es gibt eine Reihe von Möglichkeiten, wie der verwendete Speicher optimiert werden kann, um die Gesamtleistung zu verbessern. Weitere Informationen zu einigen der wichtigsten Techniken finden Sie im Abschnitt " Zuweisen von ausgerichtetem Speicher" im Leitfaden Intel FPGA SDK für OpenCL Best Practices.
Weitere Informationen zu den Strategien zur Verbesserung der Speicherzugriffseffizienz finden Sie im Abschnitt Strategien zur Verbesserung der Speicherzugriffseffizienz im Leitfaden Intel FPGA SDK für OpenCL Best Practices.
Pipelines
Das Verständnis von Pipelines ist entscheidend, um die beste Leistung Ihrer Implementierung zu erzielen. Die effiziente Nutzung von Pipelines verbessert direkt den Leistungsdurchsatz. Weitere Informationen finden Sie im Abschnitt " Pipelines" des Intel FPGA SDK für OpenCL Best Practices Guides.
Weitere Informationen zur Datenübertragung finden Sie im Abschnitt Datenübertragung über Intel FPGA SDK für OpenCL-Kanäle oder OpenCL-Pipes des Intel FPGA SDK für OpenCL Best Practices Guide.
Stall, Belegung, Bandbreite
Profilieren Sie Ihren Kernel, um Leistungsengpässe zu identifizieren. Weitere Informationen dazu, wie Profiling-Informationen Ihnen helfen, schlechtes Speicher- oder Kanalverhalten zu identifizieren, das zu einer unbefriedigenden Kernelleistung führt, finden Sie im Abschnitt Profiling Your Kernel to Identify Performance Bottlenecks im Intel FPGA SDK for OpenCL Best Practices Guide.
Schleifenoptimierung
Einige Techniken zum Optimieren der Schleifen sind:
Einige Tipps zum Entfernen von Schleifen-übertragenen Abhängigkeiten in verschiedenen Szenarien für einen einzelnen Arbeitsaufgaben-Kernel finden Sie im Abschnitt Entfernen von Schleifen-übertragenen Abhängigkeiten im Intel FPGA SDK für OpenCL Best Practices Guide.
Weitere Informationen zur Optimierung von Gleitkommavorgängen finden Sie im Abschnitt Optimierung von Gleitkommavorgängen im Intel FPGA SDK für OpenCL Best Practices Guide.
Bereichsoptimierung
Die Bereichsnutzung ist ein wichtiger Designfaktor, wenn Ihre OpenCL-Kernel auf FPGAs unterschiedlicher Größe lauffähig sind. Intel empfiehlt, beim Entwerfen Ihrer OpenCL-Anwendung bestimmte Entwurfsstrategien zur Optimierung der Nutzung des Hardwarebereichs zu befolgen.
Die Optimierung der Kernel-Leistung erfordert in der Regel zusätzliche FPGA Ressourcen. Im Gegensatz dazu führt die Flächenoptimierung häufig zu einer geringeren Leistung. Während der Kernel-Optimierung empfiehlt Intel, dass Sie mehrere Versionen des Kernels auf dem FPGA-Mainboard ausführen, um die Kernel-Programmierstrategie zu bestimmen, die den besten Kompromiss zwischen Größe und Leistung generiert.
Weitere Informationen zu Strategien für die Optimierung der FPGA Bereichsnutzung finden Sie im Abschnitt Strategien für die Optimierung FPGA Bereichsnutzung des Intel FPGA SDK für OpenCL Best Practices Guide.
Beispiele für Referenzdesigns
Im Folgenden finden Sie einige Designbeispiele, die die Optimierungstechniken veranschaulichen:
Matrixmultiplikation Designbeispiel
Dieses Beispiel zeigt die Optimierung der fundamentalen Matrixmultiplikationsoperation mithilfe von Schleifenkacheln, um die Vorteile der Datenwiederverwendung zu nutzen, die der Berechnung innewohnt.
Dieses Beispiel veranschaulicht:
- Gleitkomma-Optimierungen mit einfacher Genauigkeit
- Lokale Speicherpufferung
- Kompilierungsoptimierungen (Schleifenabrollung, num_simd_work_items Attribut)
- Fließkomma-Optimierungen
- Ausführung mehrerer Geräte
Designbeispiel für Zeitbereichs-FIR-Filter
Dieses Designbeispiel implementiert den Zeit-Domain-Finite-Impulse-Response-Filter-Benchmark (FIR) aus der HPEC Challenge Benchmark Suite.
Dieses Design ist ein großartiges Beispiel dafür, wie FPGAs eine weitaus bessere Leistung als eine GPU-Architektur für Gleitkomma-FIR-Filter bieten können.
Dieses Beispiel veranschaulicht:
- Gleitkomma-Optimierungen mit einfacher Genauigkeit
- Effiziente Implementierung eines 1D-Schiebefensterpuffers
- Einzelne Work-Item-Kernel-Optimierungsmethoden
Video-Downscaling-Designbeispiel
In diesem Designbeispiel wird ein Video-Downscaler implementiert, der 1080p-Eingabevideo aufnimmt und 720p-Video mit 110 Bildern pro Sekunde ausgibt. In diesem Beispiel werden mehrere Kernel verwendet, um effizient aus dem globalen Speicher zu lesen und in diesen zu schreiben.
Dieses Beispiel veranschaulicht
- Kernel-Kanäle
- Mehrere gleichzeitige Kernel
- Kernel-zu-Kernel-Kanäle
- Schiebefenster-Designmuster
- Optimierungen der Speicherzugriffsmuster
Designbeispiel für optischen Fluss
Dieses Designbeispiel ist eine OpenCL-Implementierung des Lucas Kanade Optical Flow Algorithmus. Eine dichte, nicht iterative und nicht pyramidenförmige Version mit einer Fenstergröße von 52 x 52 wird im Cyclone® V SoC Entwicklungskit mit über 80 Bildern pro Sekunde ausgeführt.
Dieses Beispiel veranschaulicht:
- Einzelner Work-Item-Kernel
- Schiebefenster-Designmuster
- Techniken zur Reduzierung des Ressourcenverbrauchs
- Visuelle Ausgabe
Ausbildung
Online-Schulungen speziell zur OpenCL-Optimierung mit Designbeispielen finden Sie unter:
- OpenCL-Optimierungstechniken: Beispiel für einen Bildverarbeitungsalgorithmus
- OpenCL-Optimierungstechniken: Beispiel für einen sicheren Hash-Algorithmus
Verweise
Profilerstellung
Wenn in einem mehrstufigen Design-Flow die geschätzte Kernelleistung aus der Emulation akzeptabel ist, können Sie Informationen darüber sammeln, wie Ihr Design bei der Ausführung auf dem FPGA funktioniert.
Sie können das Intel® FPGA SDK für OpenCL™ Offline Compiler anweisen, Leistungsindikatoren im Verilog-Code in der .aocx-Datei mit der Option -profile zu instrumentieren. Während der Ausführung misst und meldet das Intel FPGA SDK für OpenCL Profiler Leistungsdaten, die während der Ausführung des OpenCL-Kernels auf dem FPGA gesammelt werden. Anschließend können Sie die Leistungsdaten in der Profiler-GUI überprüfen.
Der Abschnitt Profiling Your OpenCL Kernel im Intel FPGA SDK for OpenCL Programming Guide enthält weitere Informationen zum Profiling Ihres Kernels .
Analysieren von Profilerstellungsdaten
Profiling-Informationen helfen Ihnen, schlechtes Speicher- oder Kanalverhalten zu identifizieren, das zu einer unbefriedigenden Kernelleistung führt. Der Abschnitt Profile Your Kernel to Identify Performance Bottlenecks im Intel FPGA SDK für OpenCL Best Practices Guide enthält ausführlichere Informationen zur Dynamic Profiler GUI und zur Interpretation von Profiling-Daten wie Stall, Bandbreite, Cache-Treffer usw. Es enthält auch eine Profiler-Analyse mehrerer OpenCL-Designbeispielszenarien.
2. Host-Code-Entwickler
Laufzeit-Hostbibliotheken
Intel® FPGA SDK für OpenCL bietet einen Compiler und Tools zum Erstellen und Ausführen von OpenCL-Anwendungen™, die auf Intel FPGA Produkte abzielen.
Wenn Sie nur das Intel FPGA SDK für die Kernel-Bereitstellungsfunktionalität von OpenCL benötigen, laden Sie die Intel FPGA Runtime Environment (RTE) für OpenCL herunter und installieren Sie es.
Der RTE ist eine Teilmenge des Intel FPGA SDK für OpenCL. Im Gegensatz zum SDK, das eine Umgebung bereitstellt, die die Entwicklung und Bereitstellung von OpenCL-Kernelprogrammen ermöglicht, bietet RTE Tools und Laufzeitkomponenten, mit denen Sie ein Hostprogramm erstellen und ausführen sowie vorkompilierte OpenCL-Kernelprogramme auf Zielbeschleunigerkarten ausführen können.
Installieren Sie das SDK und den RTE nicht auf demselben Hostsystem. Das SDK enthält den RTE bereits.
Dienstprogramme und Host-Laufzeitbibliotheken
Die RTE für OpenCL bietet Dienstprogramme, Host-Laufzeitbibliotheken, Treiber sowie RTE-spezifische Bibliotheken und Dateien.
- Das RTE-Dienstprogramm enthält Befehle, die Sie zum Ausführen allgemeiner Aufgaben aufrufen können. Die RTE-Dienstprogramme sind eine Teilmenge des Intel FPGA SDK für OpenCL-Dienstprogramme
- Die Host-Runtime stellt die OpenCL-Hostplattform-API und Laufzeit-API für Ihre OpenCL-Hostanwendung bereit
Die Host-Laufzeitumgebung besteht aus den folgenden Bibliotheken:
- Statisch verknüpfte Bibliotheken bieten OpenCL-Host-APIs, Hardware-Abstraktionen und Hilfsbibliotheken
- Dynamic Link Libraries (DLLs) stellen Hardware-Abstraktionen und Hilfsbibliotheken bereit
Weitere Informationen zu Dienstprogrammen und Host-Laufzeitbibliotheken finden Sie im Abschnitt Inhalt des Intel FPGA RTE für OpenCL des Intel FPGA RTE for OpenCL Getting Started Guide.
Daten-Streaming (Host-Kanal)
Sie können jetzt die Systemlatenz Ihrer Systeme erheblich reduzieren, indem Sie Hostkanäle verwenden, die es ermöglichen, Daten vom Host über die PCIe*-Schnittstelle direkt in den FPGA Kernel zu streamen, während der Speichercontroller umgangen wird. Der FPGA Kernel kann sofort mit der Verarbeitung der Daten beginnen und muss nicht warten, bis die Datenübertragung abgeschlossen ist. Hostkanäle werden in den OpenCL-Laufzeit-APIs (Application Programming Interfaces) unterstützt und umfassen Emulationsunterstützung.
Weitere Informationen zu Hostkanälen und Emulationsunterstützung finden Sie im Abschnitt Emulieren von E/A-Kanälen im Intel® FPGA SDK für OpenCL™ Programmierhandbuch.
Profilerstellung
Mit der Profilerstellung können Sie erfahren, wo Ihr Programm seine Zeit verbracht hat und welche verschiedenen Funktionen aufgerufen werden. Diese Informationen zeigen Ihnen, welcher Teil Ihres Programms langsamer läuft als erwartet, und der möglicherweise neu geschrieben werden muss, um die Programmausführung zu beschleunigen. Es kann Ihnen auch sagen, welche Funktionen mehr oder weniger oft aufgerufen werden, als Sie erwartet haben.
GPROF
gprof ist ein Open-Source-Tool, das unter Linux*-Betriebssystemen zur Profilerstellung des Quellcodes verfügbar ist. Es arbeitet mit zeitbasiertem Sampling. In Intervallen wird der Programmzähler abgefragt, um zu entscheiden, an welcher Stelle im Code die Ausführung angekommen ist.
Um gprex zu verwenden, kompilieren Sie den Quellcode mit dem Compiler-Profiling-Flag -pg neu
Führen Sie die ausführbaren Dateien aus, um die Dateien mit den Profilerstellungsinformationen zu generieren:
Es wird eine spezielle Datei mit dem Namen "gmon.out" generiert, die alle Informationen enthält, die das gprof-Tool benötigt, um für Menschen lesbare Profiling-Daten zu erstellen. Verwenden Sie nun das gprof-Tool auf folgende Weise:
$ gprof Quellcode gmon.out > profile_data.txt
profile_data.txt ist die Datei, die die Informationen enthält, die das GPR-Tool verwendet, um für Menschen lesbare Profiling-Daten zu erstellen. Diese besteht aus zwei Teilen: Flat Profile und Call Graph.
Das flache Profil zeigt an, wie viel Zeit Ihr Programm in jeder Funktion verbracht hat und wie oft diese Funktion aufgerufen wurde.
Das Aufrufdiagramm zeigt für jede Funktion, welche Funktionen sie aufgerufen hat, welche anderen Funktionen sie aufgerufen hat und wie oft. Es gibt auch eine Schätzung, wie viel Zeit in den Unterprogrammen jeder Funktion verbracht wurde.
Weitere Informationen über die Verwendung von gprof für Profiling finden Sie auf der GNU-Website.
Intel® VTune™ Amplifier
Der für die Profilerstellung verwendete Intel® VTune™ Amplifier hilft Ihnen, die Ausführung Ihres Codes auf Linux-Embedded-Plattformen, Android*- oder Windows*-Systemen zu beschleunigen und zu optimieren.
- Leistungsanalyse: Finden Sie serielle und parallele Code-Engpässe, analysieren Sie die Auswahl von Algorithmen und die GPU-Engine-Nutzung und verstehen Sie, wo und wie Ihre Anwendung von verfügbaren Hardware-Ressourcen profitieren kann
- Intel Energy Profiler Analyse: Analysieren Sie Leistungsereignisse und identifizieren Sie diejenigen, die Energie verschwenden
Weitere Informationen zum Intel V-Tune Amplifier finden Sie auf der Website Erste Schritte mit Intel VTune Amplifier 2018 für Linux BS .
Multithreading
OpenCL™ Host Pipelined Multithread bietet einen Rahmen, um einen hohen Durchsatz für Algorithmen zu erreichen, bei denen eine große Anzahl von Eingabedaten verarbeitet werden muss und der Prozess für jede Daten in sequentieller Reihenfolge durchgeführt werden muss. Eine der besten Anwendungen dieses Frameworks ist in heterogenen Plattformen, wo Hardware oder Plattform mit hohem Durchsatz verwendet wird, um den zeitaufwändigsten Teil der Anwendung zu beschleunigen. Die verbleibenden Teile des Algorithmus müssen in sequenzieller Reihenfolge auf anderen Plattformen wie CPUs ausgeführt werden, um entweder die Eingabedaten für die beschleunigte Aufgabe vorzubereiten oder die Ausgabe dieser Aufgabe zur Vorbereitung der endgültigen Ausgabe zu verwenden. In diesem Szenario ist der Gesamtsystemdurchsatz aufgrund des sequenziellen Charakters des ursprünglichen Algorithmus viel geringer, obwohl in diesem Szenario die Leistung des Algorithmus teilweise beschleunigt wird.
In dieser AN 831: Intel FPGA SDK for OpenCL Host Pipelined Multithread Application Note wird ein neues Pipeline-Framework für Design mit hohem Durchsatz vorgeschlagen. Dieses Framework ist optimal für die Verarbeitung großer Eingabedaten durch Algorithmen, bei denen die Datenabhängigkeit die sequentielle Ausführung aller Phasen oder Aufgaben des Algorithmus erzwingt.
FPGA Initiailisierung durch den Host
FPGAs werden häufig im Beschleunigungsbereich eingesetzt. OpenCL hat eine bestimmte Möglichkeit, von der CPU verwendet zu werden, um Aufgaben auf FPGA auszulagern. Die unten angehängte Datei enthält die allgemeinen Initialisierungsschritte, die der Hostcode benötigt, um den FPGA Kernel zu starten. Laden Sie die Datei mit den Initialisierungsschritten hier herunter.
Die Funktion init() kann von der Funktion main() aufgerufen werden, um die FPGA zu initialisieren. Der Code findet zuerst das Gerät, auf dem der Kernel ausgeführt wird, und programmiert es dann mit dem aocx, das im selben Verzeichnis wie der Host execuatable bereitgestellt wird. Nach den Initialisierungsschritten im Code muss der Benutzer die Kernel-Argumente entsprechend seinen Designanforderungen festlegen.
Es gibt auch eine cleanup()-Funktion, die die Ressourcen nach dem Ausführen des Kernels freigibt.
3. Debuggen
Emulation
Der Intel® FPGA SDK für OpenCL™ Emulator kann verwendet werden, um die Funktionalität des Kernels zu überprüfen. Der Benutzer kann die OpenCL-Kernel-Funktionalität auch als Teil der Hostanwendung auf Linux* Systemen debuggen. Die Debugging-Funktion des Intel FPGA SDK für OpenCL Emulator ermöglicht Ihnen dies.
Weitere Informationen finden Sie in diesen Abschnitten des Intel FPGA SDK für OpenCL Programmierhandbuch:
Profilerstellung
Weitere Informationen zur Profilerstellung finden Sie in den folgenden Abschnitten des Intel® FPGA SDK für OpenCL™ Programmierhandbuch:
Debug-Variablen zur Laufzeit |
|
---|---|
Es gibt bestimmte Umgebungsvariablen, die festgelegt werden können, um beim Ausführen der Hostanwendung mehr Debuginformationen abzurufen. Dabei handelt es sich um Intel® FPGA SDK für OpenCL-spezifische™ Umgebungsvariablen, mit denen Probleme mit benutzerdefinierten Plattformdesigns diagnostiziert werden können. In der folgenden Tabelle sind alle diese Umgebungsvariablen aufgeführt und im Detail beschrieben. | |
Titel der Umgebungsvariablen | Beschreibung |
ACL_HAL_DEBUG |
Legen Sie diese Variable auf einen Wert von 1 bis 5 fest, um die Debugausgabe von der Hardwareabstraktionsschicht (HAL), die direkt mit der MMD-Schicht verbunden ist, zu erhöhen. |
ACL_PCIE_DEBUG |
Legen Sie diese Variable auf einen Wert von 1 bis 10.000 fest, um die Debugausgabe der MMD zu erhöhen. Diese Variableneinstellung ist nützlich, um zu bestätigen, dass das Versions-ID-Register korrekt gelesen wurde und die UniPHY IP-Cores kalibriert sind. |
ACL_PCIE_JTAG_CABLE |
Legen Sie diese Variable so fest, dass das standardmäßige quartus_pgm-Argument, das die Kabelnummer angibt, überschrieben wird. Die Standardeinstellung ist Kabel 1. Wenn mehrere Intel® FPGA Download-Kabel vorhanden sind, können Sie ein bestimmtes Kabel angeben, indem Sie diese Variable setzen. |
ACL_PCIE_JTAG_DEVICE_INDEX |
Legen Sie diese Variable so fest, dass das standardmäßige quartus_pgm-Argument überschrieben wird, das den FPGA Geräteindex angibt. Standardmäßig hat diese Variable den Wert 1. Wenn der FPGA nicht das erste Gerät in der JTAG-Kette ist, können Sie den Wert anpassen. |
ACL_PCIE_USE_JTAG_PROGRAMMING |
Legen Sie diese Variable fest, um die MMD zu zwingen, die FPGA mit dem JTAG-Kabel neu zu programmieren, anstatt sie teilweise neu zu konfigurieren. |
ACL_PCIE_DMA_USE_MSI |
Stellen Sie diese Variable ein, wenn Sie MSI für DMA-Übertragungen (Direct Memory Access) unter Windows* OS verwenden möchten. |
Diagnose-Tool für Intel® FPGA SDK für OpenCL™
Das Diagnosetool für Intel FPGA SDK für OpenCL hilft bei der Diagnose und Behebung verschiedener Installations-/Setup-Probleme sowie Hardware- und Softwareprobleme, die bei der Arbeit mit Intel FPGA SDK für OpenCL auftreten. Das Tool führt Installationstests, Gerätetests und Link-Tests durch. Weitere Informationen zu diesem Tool finden Sie in dieser Präsentation. Um das Tool zu verwenden, laden Sie es hier herunter.
Andere Debugging-Techniken
Aufgrund einer Schleife im Hostprogramm kann es vorkommen, dass das OpenCL-System™ während der Ausführung langsamer wird. Weitere Informationen zu einem solchen Szenario finden Sie im Abschnitt Debuggen Ihres OpenCL-Systems, das sich allmählich verlangsamt des Intel® FPGA SDK für OpenCL-Programmierhandbuchs.
Der Intel Code Builder for OpenCL ist ein Software-Entwicklungstool, das als Teil des Intel FPGA SDK for OpenCL verfügbar ist. Es bietet eine Reihe von Microsoft* Visual Studio und Eclipse Plug-ins, die Funktionen zum Erstellen, Erstellen, Debuggen und Analysieren von Windows* und Linux* Anwendungen ermöglichen, die mit OpenCL beschleunigt wurden. Weitere Informationen finden Sie im Abschnitt Entwickeln/Debuggen von OpenCL-Anwendungen mit Intel Code Builder for OpenCL des Intel FPGA SDK for OpenCL Programming Guide.
Wissensdatenbank-Lösung
Intel® Arria® 10 Geräte
Intel® Stratix® 10 Geräte
Zusätzliche Ressourcen
Hier sind einige zusätzliche Links von der Intel FPGA Community zu spezifischen Fragen im Zusammenhang mit Design- und Ausführungsphasen:
4. Verfügbare Schulung
Schulungen
Sehen Sie sich die folgenden OpenCL-Schulungskurse™ an:
- Einführung in Parallel Computing mit OpenCL™ auf Intel® FPGAs
- Schreiben von OpenCL auf Intel FPGAs
- Ausführen von OpenCL auf Intel FPGAs
- Andere OpenCL-Schulungskurse
- Erstellen eines RTL-Moduls für das Intel® FPGA SDK für OpenCL™
- Erstellen von benutzerdefinierten Plattformen für Intel® FPGA SDK für OpenCL™: BSP-Grundlagen
- Erstellen von benutzerdefinierten Plattformen für Intel® FPGA SDK für OpenCL™: Modifizieren einer Referenzplattform
OpenCL™ Kurzvideos |
|
---|---|
Videotitel |
Videobeschreibung |
Dieses Video beschreibt das Out-of-Box-Verfahren zum Ausführen von zwei Anwendungen, OpenCL HelloWorld und OpenCL™ Fast Fourier Transform (FFT) auf dem Cyclone® V SoC unter Verwendung eines Windows* Rechners. |
|
So führen Sie Hello World und (andere Programme) mit OpenCL auf Cyclone V SoC mit Windows Teil 2 aus |
Dieses Video beschreibt das Out-of-Box-Verfahren zum Ausführen von zwei Anwendungen, OpenCL HelloWorld und OpenCL FFT, auf dem Cyclone V SoC mit einem Windows-Rechner. |
So führen Sie Hello World und (andere Programme) mit OpenCL auf Cyclone V SoC mit Windows Teil 3 aus |
Dieses Video beschreibt das Out-of-Box-Verfahren zum Ausführen von zwei Anwendungen, OpenCL HelloWorld und OpenCL FFT, auf dem Cyclone V SoC mit einem Windows-Rechner. |
So führen Sie Hello World und (andere Programme) mit OpenCL auf Cyclone V SoC mit Windows Teil 4 aus |
Dieses Video beschreibt das Out-of-Box-Verfahren zum Ausführen von zwei Anwendungen, OpenCL HelloWorld und OpenCL FFT, auf dem Cyclone V SoC mit einem Windows-Rechner. |
So führen Sie Hello World und (andere Programme) mit OpenCL auf Cyclone V SoC mit Windows Part 5 aus |
Dieses Video beschreibt das Out-of-Box-Verfahren zum Ausführen von zwei Anwendungen, OpenCL HelloWorld und OpenCL FFT, auf dem Cyclone V SoC mit einem Windows-Rechner. |
So verpacken Sie benutzerdefinierte Verilog-Module/-Designs als OpenCL-Bibliotheken |
In dem Video wird erläutert, warum Kunden diese Funktion möglicherweise verwenden können, um ihre benutzerdefinierten Verarbeitungsblöcke (RTL) im OpenCL-Kernelcode zu speichern. Das Video erklärt das Designbeispiel, z. B. die makefiles und Konfigurationsdateien, und erklärt den Kompilierungsablauf. Das Video zeigt auch eine Demo des Designbeispiels. |
OpenCL auf Altera® SoC FPGA (Linux* Host) – Teil 1 – Tools Download und Setup |
In diesem Video erfahren Sie, wie Sie die Tools herunterladen, installieren und konfigurieren, die für die Entwicklung von OpenCL-Kernels und Hostcode für Altera® SoC-FPGAs erforderlich sind. |
In diesem Video erfahren Sie, wie Sie eine OpenCL-Beispielanwendung herunterladen und kompilieren, die auf den in OpenCL integrierten Emulator abzielt. |
|
In diesem Video erfahren Sie, wie Sie den OpenCL-Kernel- und Hostcode für die FPGA und den Prozessor des Cyclone V SoC-FPGA kompilieren. |
|
OpenCL auf Altera SoC FPGA (Linux Host) – Teil 4 – Setup der Laufzeitumgebung |
In diesem Video erfahren Sie, wie Sie das Cyclone V SoC-Mainboard so einrichten, dass das OpenCL-Beispiel ausgeführt und der Hostcode und der Kernel auf dem Mainboard ausgeführt werden. |
Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.