Heterogene geheugensystemen creëren in FPGA SDK voor aangepaste OpenCL-platforms
Instructies
Heterogene geheugensystemen creëren in Intel® FPGA SDK voor aangepaste OpenCL-platforms
De implementatie van heterogeen geheugen in een aangepast platform zorgt voor meer externe geheugeninterface (EMIF) bandbreedte en grotere en snellere geheugentoegang. De combinatie van heterogene geheugentoegang met een geoptimaliseerde
OpenCL™(1)kernel kan resulteren in aanzienlijke prestatieverbeteringen voor uw OpenCL-systeem.
Deze toepassingsnotitie biedt richtlijnen voor het maken van heterogene geheugensystemen in een aangepast platform voor gebruik met de Intel® FPGA SDK voor OpenCL(2). Intel gaat ervan uit dat u een ervaren FPGA-ontwerper bent die aangepaste platforms ontwikkelt die heterogene geheugensystemen bevatten.
Voordat u heterogene geheugensystemen gaat maken, moet u vertrouwd raken met de Intel FPGA SDK voor OpenCL-documenten die hieronder worden gespecificeerd.
Gerelateerde informatie
- Intel FPGA SDK voor OpenCL-programmeerhandleiding
- Intel FPGA SDK voor OpenCL Best Practices-gids
- Intel FPGA SDK voor OpenCL Arria 10 GX FPGA Development Kit Reference Platform Porting Guide
1.1. Verificatie van de functionaliteit van het FPGA-bord en de EMIF-interfaces
Verifieer elke geheugeninterface afzonderlijk en instantiëer vervolgens uw aangepaste platform met behulp van globaal geheugen.
- Verifieer elke geheugeninterface met behulp van hardwareontwerpen die de snelheid en stabiliteit van elke interface kunnen testen.
- Instantieer uw aangepaste platform met behulp van globaal geheugen.
- BijvoorbeeldampBijvoorbeeld: als je drie DDR-interfaces hebt, moet één ervan worden toegewezen als heterogeen geheugen. Controleer in dit geval de functionaliteit van de OpenCL-stack met elke DDR-interface afzonderlijk.
OpenCL en het OpenCL-logo zijn handelsmerken van Apple Inc. en worden gebruikt met toestemming van de Khronos Group™. - De Intel FPGA SDK voor OpenCL is gebaseerd op een gepubliceerde Khronos-specificatie en heeft het Khronos-conformiteitstestproces doorstaan. De huidige conformiteitsstatus is te vinden op www.khronos.org/conformance.
- BijvoorbeeldampBijvoorbeeld: als je drie DDR-interfaces hebt, moet één ervan worden toegewezen als heterogeen geheugen. Controleer in dit geval de functionaliteit van de OpenCL-stack met elke DDR-interface afzonderlijk.
Intel Corporation. Alle rechten voorbehouden. Intel, het Intel-logo en andere Intel-merken zijn handelsmerken van Intel Corporation of haar dochterondernemingen. Intel garandeert de prestaties van zijn FPGA- en halfgeleiderproducten volgens de huidige specificaties in overeenstemming met de standaardgarantie van Intel, maar behoudt zich het recht voor om op elk moment zonder voorafgaande kennisgeving wijzigingen aan te brengen in producten en diensten. Intel aanvaardt geen verantwoordelijkheid of aansprakelijkheid die voortvloeit uit de toepassing of het gebruik van informatie, producten of diensten die hierin worden beschreven, behalve zoals uitdrukkelijk schriftelijk overeengekomen door Intel. Intel-klanten wordt geadviseerd om de nieuwste versie van apparaatspecificaties te verkrijgen voordat ze vertrouwen op gepubliceerde informatie en voordat ze producten of diensten bestellen. *Andere namen en merken kunnen worden geclaimd als eigendom van anderen.
ISO 9001: 2015 geregistreerd
Als u twee DDR-interfaces en één QDR-interface (quad data rate) hebt, kunt u ook de functionaliteit van de OpenCL-stack van de twee DDR-interfaces en de QDR-interface afzonderlijk verifiëren.
Intel raadt u aan om PCI Express® – (PCIe® -) of EMIF-exclusieve ontwerpen te gebruiken om uw geheugeninterfaces te testen. Nadat u hebt gecontroleerd of elke geheugeninterface functioneel is en of uw OpenCL-ontwerp werkt met een subset van de geheugeninterfaces, gaat u verder
om een volledig functioneel heterogeen geheugensysteem te creëren.
1.2. Het wijzigen van board_spec.xml File
Wijzig board_spec.xml file om de typen heterogene geheugensystemen te specificeren die beschikbaar zijn voor de OpenCL-kernels.
Tijdens de kernelcompilatie wijst de Intel FPGA SDK voor OpenCL Offline Compiler kernelargumenten toe aan een geheugen op basis van het bufferlocatieargument dat u opgeeft.
1. Blader naar board_spec.xml file in de hardwaremap van uw aangepaste platform.
2. Open board_spec.xml file in een teksteditor en wijzig de XML dienovereenkomstig.
Bijvoorbeeldample, als uw hardwaresysteem twee DDR-geheugens heeft als standaard globaal geheugen en twee QDR-banken die u modelleert als heterogeen geheugen, wijzig dan de geheugensecties van board_spec.xml file om op het volgende te lijken:
1.3. Meerdere geheugenverdelers instellen in Qsys
Momenteel ondersteunt de OpenCL Memory Bank Divider in het Qsys-ontwerp geen niet-power-of-2-aantal geheugenbanken, wat geen beperking is voor typische configuraties. Er zijn echter scenario's waarin een niet-power-of-2-aantal geheugeninterfaces nodig is. Om ruimte te bieden aan een aantal geheugeninterfaces dat niet het vermogen van 2 heeft, gebruikt u meerdere OpenCL Memory Bank Dividers om heterogene geheugensystemen te creëren met een aantal geheugenbanken dat niet het vermogen van 2 heeft. U moet meerdere OpenCL Memory Bank Dividers maken als u een echt heterogeen geheugensysteem heeft. Overweeg een systeem met één DDR-geheugeninterface en één QDR-geheugeninterface. Omdat de twee banken verschillende geheugentopologieën hebben, kunt u ze niet combineren onder één enkel globaal geheugen.
Figuur 1. Blokdiagram van een heterogeen geheugensysteem met drie banken
Dit heterogene geheugensysteem bevat twee DDR-geheugeninterfaces en één QDR-geheugeninterface.Als u versie 16.0, 16.0.1 of 16.0.2 van de Intel Quartus® Prime-software en de Altera SDK voor OpenCL gebruikt, verwerkt de OpenCL Memory Bank Divider onjuist geheugenbursts over adresgrenzen heen. Om dit bekende probleem te omzeilen, voegt u een pijplijnbrug toe met een burst-grootte van 1 en sluit u de Avalon ®Memory-Mapped (Avalon-MM) master aan op de slave-poort van de OpenCL Memory Bank Divider.
Opmerking:
Dit bekende probleem is opgelost in de Intel Quartus Prime-software en de Intel FPGA SDK voor OpenCL versie 16.1.
Figuur 2. Blokdiagram van een heterogeen geheugensysteem met drie banken en een pijpleidingbrug 1.4. Het Boardtest-programma en de hostcode voor uw heterogene geheugenoplossing wijzigen
Gebruik de boardtest.cl-kernel die wordt meegeleverd met de Intel FPGA SDK voor OpenCL Custom Platform Toolkit om de functionaliteit en prestaties van uw Custom Platform te testen.
Het boardtest-programma is een OpenCL-kernel waarmee u de bandbreedte van host naar apparaat, geheugenbandbreedte en algemene functionaliteit van uw aangepaste platform kunt testen.
- Blader naar de /board/custom_platform_toolkit/tests/boardtest map.
- Open de boardtest.cl file in een teksteditor en wijs een bufferlocatie toe aan elk globaal geheugenargument.
Bijvoorbeeldampon:
__kernel leegte
mem_stream (__global__attribute__((buffer_locatie(“DDR”))) uint *src, __global __attribute__((buffer_locatie(“QDR”))) uint *dst, uint arg, uint arg2)
Hier wordt uint *src toegewezen aan DDR-geheugen, en uint *dst aan QDR-geheugen. De board_spec.xml file specificeert de kenmerken van beide geheugensystemen. - Om uw heterogene geheugenoplossing in uw OpenCL-systeem te benutten, wijzigt u uw hostcode door de vlag CL_MEM_HETEROGENEOUS_INTELFPGA toe te voegen aan uw clCreateBuffer-aanroep.
Bijvoorbeeldampon:
ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof (niet-ondertekend) * vectorSize, NULL, &status);
Intel raadt ten zeerste aan dat u de bufferlocatie als kernelargument instelt voordat u de buffer schrijft. Wanneer u één enkel globaal geheugen gebruikt, kunt u de buffers schrijven vóór of na het toewijzen ervan aan een kernelargument. In heterogene geheugensystemen stelt de host de bufferlocatie in voordat de buffer wordt geschreven. Met andere woorden: de host zal de functie clSetKernelArgument aanroepen voordat de functie clEnqueueWriteBuffer wordt aangeroepen.
Roep in uw hostcode de aanroepen clCreateBuffer, clSetKernelArg en clEnqueueWriteBuffer aan in de volgende volgorde:
ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof (niet-ondertekend) * vectorSize, NULL, &status);
… status = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
… status = clEnqueueWriteBuffer(wachtrij, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
De ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file presenteert een vergelijkbare volgorde van deze functieaanroepen. - Nadat u boardtest.cl hebt gewijzigd file en de hostcode, compileer de host- en kernelcode en verifieer hun functionaliteit.
Wanneer u uw kernelcode compileert, moet u burst-interleaving van alle geheugensystemen uitschakelen door de optie –no-interleaving op te nemen optie in het aoc-commando.
Gerelateerde informatie
Burst-interleaving van het globale geheugen uitschakelen (–no-interleaving )
1.5. De functionaliteit van uw heterogene geheugen verifiëren Systeem
Om ervoor te zorgen dat het heterogene geheugensysteem correct functioneert, schakelt u de vlag CL_CONTEXT_COMPILER_MODE_INTELFPGA uit in uw hostcode.
In OpenCL-systemen met homogeen geheugen moet u de optie CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 in uw hostcode instellen om het lezen van de .aocx uit te schakelen file en de herprogrammering van de FPGA. Het instellen van de vlag CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 is handig bij het instantiëren van uw bord om de functionaliteit van uw aangepaste platform te verifiëren zonder de plattegrond te ontwerpen en de LogicLock™-regio's op te geven.
Bij heterogene geheugensystemen moet de runtime-omgeving de bufferlocaties van elke buffer lezen, beschreven in de .aocx file, om de functionaliteit van het geheugensysteem te verifiëren. Mogelijk wilt u echter de functionaliteit van uw aangepaste platform verifiëren zonder de laatste kenmerken van het bordontwerp te implementeren, zoals het ontwerpen van de plattegrond en het specificeren van de LogicLock-regio's.
- Controleer of de vlag CL_CONTEXT_COMPILER_MODE_INTELFPGA is uitgeschakeld in uw hostcode.
- Blader naar het bord/ /source/host/mmd map van uw aangepaste platform.
- Open het acl_pcie_device.cpp geheugen toegewezen apparaat (MMD) file in een teksteditor.
- Wijzig de herprogrammeerfunctie in acl_pcie_device.cpp file door een return 0 toe te voegen; lijn, zoals hieronder weergegeven:
int ACL_PCIE_DEVICE::reprogram(ongeldig *data, size_t data_size)
{
retour 0;
// ga uit van een mislukking
int herprogrammeren_failed = 1;
// ga ervan uit dat er geen rbf of hash is in fpga.bin
int rbf_or_hash_not_provided = 1;
// ga ervan uit dat basis- en importrevisie-hashes niet overeenkomen
int hash_mismatch = 1;
…
} - Compileer acl_pcie_device.cpp opnieuw file.
- Controleer of de vlag CL_CONTEXT_COMPILER_MODE_INTELFPGA uitgeschakeld blijft.
Aandacht: Nadat u return 0 hebt toegevoegd; naar de herprogrammeerfunctie en compileer de MMD opnieuw file, zal de runtime-omgeving de .aocx lezen file en wijs de bufferlocaties toe, maar zal de FPGA niet herprogrammeren. U moet de FPGA-afbeelding handmatig matchen met de .aocx file. Om dit gedrag om te keren, verwijdert u return 0; uit de herprogrammeerfunctie en compileer de MMD opnieuw file.
1.6. Documentrevisiegeschiedenis
Datum | Versie | Wijzigingen |
17 dec. | 2017.12.01 | • Omgedoopt tot CL_MEM_HETEROGENEOUS_ALTERA in CL_MEM_HETEROGENEOUS_INTELFPGA. |
16 dec. | 2016.12.13 | • Omgedoopt tot CL_CONTEXT_COMPILER_MODE_ALTERA in CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Heterogene geheugensystemen creëren in Intel® FPGA SDK voor OpenCL
Aangepaste platforms
Feedback verzenden
Online versie
Feedback verzenden
ID: 683654
Versie: 2016.12.13
Documenten / Bronnen
![]() |
intel Heterogene geheugensystemen creëren in FPGA SDK voor aangepaste OpenCL-platforms [pdf] Instructies Heterogene geheugensystemen maken in FPGA SDK voor aangepaste OpenCL-platforms, Heterogene geheugensystemen creëren, FPGA SDK voor aangepaste OpenCL-platforms |