Erstellen heterogener Speichersysteme im FPGA SDK für benutzerdefinierte OpenCL-Plattformen
Anweisungen
Erstellen heterogener Speichersysteme im Intel® FPGA SDK für benutzerdefinierte OpenCL-Plattformen
Die Implementierung von heterogenem Speicher in einer benutzerdefinierten Plattform ermöglicht mehr Bandbreite für externe Speicherschnittstellen (EMIF) sowie größere und schnellere Speicherzugriffe. Die Kombination von heterogenem Speicherzugriff mit einer optimierten
OpenCL ™(1)kernel kann zu erheblichen Leistungsverbesserungen für Ihr OpenCL-System führen.
Dieser Anwendungshinweis enthält Anleitungen zum Erstellen heterogener Speichersysteme in einer benutzerdefinierten Plattform zur Verwendung mit dem Intel® FPGA SDK für OpenCL(2). Intel geht davon aus, dass Sie ein erfahrener FPGA-Designer sind, der benutzerdefinierte Plattformen entwickelt, die heterogene Speichersysteme enthalten.
Machen Sie sich vor dem Erstellen der heterogenen Speichersysteme mit den unten angegebenen Dokumenten zum Intel FPGA SDK für OpenCL vertraut.
Zugehörige Informationen
- Intel FPGA SDK für OpenCL-Programmierhandbuch
- Intel FPGA SDK für OpenCL – Best Practices-Handbuch
- Intel FPGA SDK für OpenCL Arria 10 GX FPGA Development Kit Referenzplattform-Portierungshandbuch
1.1. Überprüfung der Funktionalität der FPGA-Karte und der EMIF-Schnittstellen
Überprüfen Sie jede Speicherschnittstelle einzeln und instanziieren Sie dann Ihre benutzerdefinierte Plattform mithilfe des globalen Speichers.
- Überprüfen Sie jede Speicherschnittstelle mithilfe von Hardwaredesigns, mit denen die Geschwindigkeit und Stabilität jeder Schnittstelle getestet werden kann.
- Instanziieren Sie Ihre benutzerdefinierte Plattform mithilfe des globalen Speichers.
- Zum BeispielampWenn Sie also drei DDR-Schnittstellen haben, muss eine davon als heterogener Speicher zugeordnet werden. Überprüfen Sie in diesem Fall die Funktionalität des OpenCL-Stacks mit jeder DDR-Schnittstelle einzeln.
OpenCL und das OpenCL-Logo sind Marken von Apple Inc. und werden mit Genehmigung der Khronos Group™ verwendet. - Das Intel FPGA SDK für OpenCL basiert auf einer veröffentlichten Khronos-Spezifikation und hat den Khronos-Konformitätstestprozess bestanden. Den aktuellen Konformitätsstatus finden Sie unter www.khronos.org/conformance.
- Zum BeispielampWenn Sie also drei DDR-Schnittstellen haben, muss eine davon als heterogener Speicher zugeordnet werden. Überprüfen Sie in diesem Fall die Funktionalität des OpenCL-Stacks mit jeder DDR-Schnittstelle einzeln.
Intel Corporation. Alle Rechte vorbehalten. Intel, das Intel-Logo und andere Intel-Marken sind Marken der Intel Corporation oder ihrer Tochtergesellschaften. Intel garantiert die Leistung seiner FPGA- und Halbleiterprodukte gemäß den aktuellen Spezifikationen gemäß der Standardgarantie von Intel, behält sich jedoch das Recht vor, jederzeit ohne Vorankündigung Änderungen an Produkten und Diensten vorzunehmen. Intel übernimmt keine Verantwortung oder Haftung, die sich aus der Anwendung oder Verwendung von hierin beschriebenen Informationen, Produkten oder Diensten ergeben, es sei denn, Intel hat ausdrücklich schriftlich zugestimmt. Intel-Kunden wird empfohlen, die neueste Version der Gerätespezifikationen zu beschaffen, bevor sie sich auf veröffentlichte Informationen verlassen und bevor sie Produkte oder Dienstleistungen bestellen. *Andere Namen und Marken können als Eigentum anderer beansprucht werden.
ISO 9001: 2015 registriert
Wenn Sie alternativ über zwei DDR-Schnittstellen und eine Quad Data Rate (QDR)-Schnittstelle verfügen, überprüfen Sie die Funktionalität des OpenCL-Stapels der beiden DDR-Schnittstellen und der QDR-Schnittstelle unabhängig voneinander.
Intel empfiehlt, dass Sie PCI Express® – (PCIe® -) oder EMIF-exklusive Designs verwenden, um Ihre Speicherschnittstellen zu testen. Nachdem Sie überprüft haben, dass jede Speicherschnittstelle funktionsfähig ist und dass Ihr OpenCL-Design mit einer Teilmenge der Speicherschnittstellen funktioniert, fahren Sie fort
um ein voll funktionsfähiges heterogenes Speichersystem zu erstellen.
1.2. Ändern der Datei board_spec.xml File
Ändern Sie die Datei board_spec.xml file um die Typen heterogener Speichersysteme anzugeben, die den OpenCL-Kerneln zur Verfügung stehen.
Während der Kernelkompilierung weist der Intel FPGA SDK für den OpenCL Offline Compiler Kernelargumente einem Speicher zu, der auf dem von Ihnen angegebenen Pufferspeicherortargument basiert.
1. Navigieren Sie zur Datei board_spec.xml file im Hardwareverzeichnis Ihrer benutzerdefinierten Plattform.
2. Öffnen Sie die Datei board_spec.xml file in einem Texteditor und ändern Sie das XML entsprechend.
Zum BeispielampWenn Ihr Hardwaresystem beispielsweise über zwei DDR-Speicher als Standard-Globalspeicher und zwei QDR-Bänke verfügt, die Sie als heterogenen Speicher modellieren, ändern Sie die Speicherabschnitte der Datei board_spec.xml file sollte etwa wie folgt aussehen:
1.3. Einrichten mehrerer Speicherteiler in Qsys
Derzeit unterstützt der OpenCL Memory Bank Divider im Qsys-Design keine Speicherbankanzahl, die nicht Zweierpotenzen entspricht, was für typische Konfigurationen keine Einschränkung darstellt. Es gibt jedoch Szenarien, in denen Speicherschnittstellen erforderlich sind, die nicht Zweierpotenzen entsprechen. Um Speicherschnittstellen zu unterstützen, die nicht Zweierpotenzen entsprechen, verwenden Sie mehrere OpenCL Memory Bank Divider, um heterogene Speichersysteme mit Speicherbankanzahlen zu erstellen, die nicht Zweierpotenzen entsprechen. Sie müssen mehrere OpenCL Memory Bank Divider erstellen, wenn Sie ein wirklich heterogenes Speichersystem haben. Stellen Sie sich ein System mit einer DDR-Speicherschnittstelle und einer QDR-Speicherschnittstelle vor. Da die beiden Bänke unterschiedliche Speichertopologien haben, können Sie sie nicht in einem einzigen globalen Speicher kombinieren.
Abbildung 1. Blockdiagramm eines heterogenen Speichersystems mit drei Bänken
Dieses heterogene Speichersystem enthält zwei DDR-Speicherschnittstellen und eine QDR-Speicherschnittstelle.Wenn Sie Version 16.0, 16.0.1 oder 16.0.2 der Intel Quartus® Prime-Software und das Altera SDK für OpenCL verwenden, verarbeitet der OpenCL Memory Bank Divider Speicherbursts über Adressgrenzen hinweg falsch. Um dieses bekannte Problem zu umgehen, fügen Sie eine Pipeline-Brücke mit einer Burst-Größe von 1 hinzu und verbinden Sie deren Avalon ®Memory-Mapped (Avalon-MM)-Master mit dem Slave-Port des OpenCL Memory Bank Divider.
Notiz:
Dieses bekannte Problem wurde in der Intel Quartus Prime-Software und im Intel FPGA SDK für OpenCL Version 16.1 behoben.
Abbildung 2. Blockdiagramm eines heterogenen Speichersystems mit drei Bänken und einer Pipeline-Brücke 1.4. Anpassen des Boardtest-Programms und des Host-Codes für Ihre heterogene Speicherlösung
Verwenden Sie den boardtest.cl-Kernel, der mit dem Intel FPGA SDK für OpenCL Custom Platform Toolkit geliefert wird, um die Funktionalität und Leistung Ihrer benutzerdefinierten Plattform zu testen.
Das Boardtest-Programm ist ein OpenCL-Kernel, mit dem Sie die Host-zu-Gerät-Bandbreite, die Speicherbandbreite und die allgemeine Funktionalität Ihrer benutzerdefinierten Plattform testen können.
- Navigieren Sie zu /board/ custom_platform_toolkit/tests/boardtest-Verzeichnis.
- Öffnen Sie boardtest.cl file in einem Texteditor und weisen Sie jedem globalen Speicherargument einen Pufferspeicherort zu.
Zum Beispielampauf:
__kernel leer
mem_stream (__global__attribute__((buffer_location(„DDR“))) uint *src, __global __attribute__((buffer_location(„QDR“))) uint *dst, uint arg, uint arg2)
Hier wird uint *src dem DDR-Speicher und uint *dst dem QDR-Speicher zugewiesen. Die Datei board_spec.xml file spezifiziert die Eigenschaften beider Speichersysteme. - Um Ihre heterogene Speicherlösung in Ihrem OpenCL-System zu nutzen, ändern Sie Ihren Hostcode, indem Sie Ihrem clCreateBuffer-Aufruf das Flag CL_MEM_HETEROGENEOUS_INTELFPGA hinzufügen.
Zum Beispielampauf:
ddatain = clCreateBuffer(Kontext, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, Größe von (unsigniert) * Vektorgröße, NULL, &Status);
Intel empfiehlt dringend, den Pufferspeicherort als Kernel-Argument festzulegen, bevor Sie den Puffer schreiben. Wenn Sie einen einzelnen globalen Speicher verwenden, können Sie die Puffer entweder vor oder nach der Zuweisung zu einem Kernel-Argument schreiben. In heterogenen Speichersystemen legt der Host den Pufferspeicherort fest, bevor er den Puffer schreibt. Mit anderen Worten: Der Host ruft die Funktion clSetKernelArgument auf, bevor er die Funktion clEnqueueWriteBuffer aufruft.
Rufen Sie in Ihrem Hostcode die Aufrufe clCreateBuffer, clSetKernelArg und clEnqueueWriteBuffer in der folgenden Reihenfolge auf:
ddatain = clCreateBuffer(Kontext, CL_MEM_READ_WRITE | Memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, Größe von (unsigniert) * Vektorgröße, NULL, &Status);
… status = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
… Status = clEnqueueWriteBuffer(Warteschlange, ddatain, CL_FALSE, 0, Größe von (unsigniert) * Vektorgröße, hdatain, 0, NULL, NULL);
Die Datei ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file stellt eine ähnliche Reihenfolge dieser Funktionsaufrufe dar. - Nachdem Sie die Datei boardtest.cl geändert haben file und den Hostcode, kompilieren Sie den Host- und Kernelcode und überprüfen Sie ihre Funktionalität.
Beim Kompilieren Ihres Kernelcodes müssen Sie Burst-Interleaving aller Speichersysteme deaktivieren, indem Sie den Befehl –no-interleaving einbinden. Option im AOC-Befehl.
Zugehörige Informationen
Burst-Interleaving des globalen Speichers deaktivieren (–no-interleaving )
1.5. Überprüfen der Funktionalität Ihres heterogenen Speichers System
Um sicherzustellen, dass das heterogene Speichersystem ordnungsgemäß funktioniert, deaktivieren Sie das Flag CL_CONTEXT_COMPILER_MODE_INTELFPGA in Ihrem Hostcode.
In OpenCL-Systemen mit homogenem Speicher müssen Sie optional das Flag CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 in Ihrem Hostcode setzen, um das Lesen der .aocx-Datei zu deaktivieren. file und die Neuprogrammierung des FPGA. Das Setzen des Flags CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 ist beim Instanziieren Ihrer Platine nützlich, um die Funktionalität Ihrer benutzerdefinierten Plattform zu überprüfen, ohne den Grundriss zu entwerfen und die LogicLock™-Regionen anzugeben.
Bei heterogenen Speichersystemen muss die Laufzeitumgebung die in der AOCX-Datei beschriebenen Pufferpositionen jedes Puffers lesen. file, um die Funktionalität der Speichersysteme zu überprüfen. Möglicherweise möchten Sie jedoch die Funktionalität Ihrer benutzerdefinierten Plattform überprüfen, ohne die endgültigen Funktionen des Platinendesigns zu implementieren, z. B. den Grundriss zu entwerfen und die LogicLock-Regionen anzugeben.
- Stellen Sie sicher, dass das Flag CL_CONTEXT_COMPILER_MODE_INTELFPGA in Ihrem Hostcode nicht gesetzt ist.
- Navigieren Sie zum Board/ /source/host/mmd-Verzeichnis Ihrer benutzerdefinierten Plattform.
- Öffnen Sie das Memory-Mapped-Device (MMD) acl_pcie_device.cpp. file in einem Texteditor.
- Ändern Sie die Neuprogrammierungsfunktion in acl_pcie_device.cpp file indem Sie eine Zeile „return 0;“ hinzufügen, wie unten gezeigt:
int ACL_PCIE_DEVICE::reprogram(void *data, size_t Datengröße)
{
gebe 0 zurück;
// gehe von einem Fehler aus
int Neuprogrammierung fehlgeschlagen = 1;
// gehe davon aus, dass in fpga.bin kein RBF oder Hash vorhanden ist
int rbf_or_hash_not_provided = 1;
// gehe davon aus, dass die Hashes für Basis- und Importrevision nicht übereinstimmen
int hash_mismatch = 1;
…
} - Kompilieren Sie acl_pcie_device.cpp neu. file.
- Stellen Sie sicher, dass das Flag CL_CONTEXT_COMPILER_MODE_INTELFPGA nicht gesetzt ist.
Aufmerksamkeit: Nachdem Sie return 0; zur Reprogrammierungsfunktion hinzugefügt und das MMD neu kompiliert haben file, die Laufzeitumgebung liest die .aocx file und weist die Pufferspeicherorte zu, programmiert das FPGA jedoch nicht neu. Sie müssen das FPGA-Image manuell mit der .aocx-Datei abgleichen. fileUm dieses Verhalten umzukehren, entfernen Sie return 0; aus der Reprogrammierungsfunktion und kompilieren Sie das MMD neu. file.
1.6. Dokumentversionsverlauf
Datum | Version | Änderungen |
17. Dezember | 2017.12.01 | • CL_MEM_HETEROGENEOUS_ALTERA wurde in CL_MEM_HETEROGENEOUS_INTELFPGA umbenannt. |
16. Dezember | 2016.12.13 | • CL_CONTEXT_COMPILER_MODE_ALTERA wurde in CL_CONTEXT_COMPILER_MODE_INTELFPGA umbenannt. |
Erstellen heterogener Speichersysteme im Intel® FPGA SDK für OpenCL
Benutzerdefinierte Plattformen
Feedback senden
Online Version
Feedback senden
Artikel-Nr.: 683654
Version: 2016.12.13
Dokumente / Ressourcen
![]() |
intel Erstellen heterogener Speichersysteme im FPGA SDK für benutzerdefinierte OpenCL-Plattformen [pdf] Anweisungen Erstellen heterogener Speichersysteme im FPGA SDK für benutzerdefinierte OpenCL-Plattformen, Erstellen heterogener Speichersysteme, FPGA SDK für benutzerdefinierte OpenCL-Plattformen |