Opprette heterogene minnesystemer i FPGA SDK for tilpassede OpenCL-plattformer
Instruksjoner
Opprette heterogene minnesystemer i Intel® FPGA SDK for tilpassede OpenCL-plattformer
Implementeringen av heterogent minne i en tilpasset plattform gir mer båndbredde for eksternt minnegrensesnitt (EMIF) samt større og raskere minnetilgang. Kombinasjonen av heterogen minnetilgang med en optimalisert
OpenCL ™(1)-kjernen kan resultere i betydelige ytelsesforbedringer for ditt OpenCL-system.
Dette applikasjonsnotatet gir veiledning for å lage heterogene minnesystemer i en tilpasset plattform for bruk med Intel® FPGA SDK for OpenCL(2). Intel antar at du er en erfaren FPGA-designer som utvikler tilpassede plattformer som inneholder heterogene minnesystemer.
Før du oppretter de heterogene minnesystemene, bør du gjøre deg kjent med Intel FPGA SDK for OpenCL-dokumenter spesifisert nedenfor.
Relatert informasjon
- Intel FPGA SDK for OpenCL-programmeringsveiledning
- Intel FPGA SDK for OpenCL Best Practices Guide
- Intel FPGA SDK for OpenCL Arria 10 GX FPGA Development Kit Reference Platform Porting Guide
1.1. Verifisering av funksjonaliteten til FPGA-kortet og EMIF-grensesnittene
Bekreft hvert minnegrensesnitt uavhengig og instansier deretter din egendefinerte plattform ved å bruke globalt minne.
- Verifiser hvert minnegrensesnitt ved å bruke maskinvaredesign som kan teste hastigheten og stabiliteten til hvert grensesnitt.
- Instantier din egendefinerte plattform ved hjelp av globalt minne.
- For eksample, hvis du har tre DDR-grensesnitt, må ett av dem kartlegges som heterogent minne. I dette tilfellet kontrollerer du funksjonaliteten til OpenCL-stakken med hvert DDR-grensesnitt uavhengig.
OpenCL og OpenCL-logoen er varemerker for Apple Inc. brukt med tillatelse fra Khronos Group™. - Intel FPGA SDK for OpenCL er basert på en publisert Khronos-spesifikasjon, og har bestått Khronos Conformance Testing Process. Gjeldende samsvarsstatus finner du på www.khronos.org/conformance.
- For eksample, hvis du har tre DDR-grensesnitt, må ett av dem kartlegges som heterogent minne. I dette tilfellet kontrollerer du funksjonaliteten til OpenCL-stakken med hvert DDR-grensesnitt uavhengig.
Intel Corporation. Alle rettigheter forbeholdt. Intel, Intel-logoen og andre Intel-merker er varemerker for Intel Corporation eller dets datterselskaper. Intel garanterer ytelsen til sine FPGA- og halvlederprodukter i henhold til gjeldende spesifikasjoner i henhold til Intels standardgaranti, men forbeholder seg retten til å gjøre endringer i produkter og tjenester når som helst uten varsel. Intel påtar seg intet ansvar eller ansvar som oppstår som følge av applikasjonen eller bruken av informasjon, produkter eller tjenester som er beskrevet her, med mindre det er uttrykkelig skriftlig avtalt med Intel. Intel-kunder anbefales å få tak i den nyeste versjonen av enhetsspesifikasjonene før de stoler på publisert informasjon og før de bestiller produkter eller tjenester. *Andre navn og merker kan gjøres krav på som andres eiendom.
ISO 9001: 2015 Registrert
Alternativt, hvis du har to DDR-grensesnitt og ett quad data rate (QDR)-grensesnitt, verifiser funksjonaliteten til OpenCL-stakken av de to DDR-grensesnittene og QDR-grensesnittet uavhengig.
Intel anbefaler at du bruker PCI Express® – (PCIe® -) eller EMIF-eksklusive design for å teste minnegrensesnittene dine. Etter at du har bekreftet at hvert minnegrensesnitt er funksjonelt og at OpenCL-designet ditt fungerer med et undersett av minnegrensesnittene, fortsett
å skape et fullt funksjonelt heterogent minnesystem.
1.2. Endre board_spec.xml File
Endre board_spec.xml file å spesifisere typene heterogene minnesystemer som er tilgjengelige for OpenCL-kjernene.
Under kjernekompilering tilordner Intel FPGA SDK for OpenCL Offline Compiler kjerneargumenter til et minne basert på bufferplasseringsargumentet du angir.
1. Bla til board_spec.xml file i maskinvarekatalogen til din egendefinerte plattform.
2. Åpne board_spec.xml file i et tekstredigeringsprogram og endre XML deretter.
For eksample, hvis maskinvaresystemet ditt har to DDR-minner som standard globalt minne og to QDR-banker som du modellerer som heterogent minne, endre minneseksjonene i board_spec.xml file å ligne følgende:
1.3. Sette opp flere minnedelere i Qsys
For øyeblikket støtter ikke OpenCL Memory Bank Divider i Qsys-designen ikke-power-of-2 antall minnebanker, noe som ikke er en begrensning for typiske konfigurasjoner. Imidlertid er det scenarier hvor ikke-power-of-2 antall minnegrensesnitt er nødvendig. For å imøtekomme ikke-power-of-2 antall minnegrensesnitt, bruk flere OpenCL Memory Bank Dividers for å lage heterogene minnesystemer med ikke-power-of-2 antall minnebanker. Du må lage flere OpenCL Memory Bank Dividers når du har et ekte heterogent minnesystem. Tenk på et system med ett DDR-minnegrensesnitt og ett QDR-minnegrensesnitt. Fordi de to bankene har forskjellige minnetopologier, kan du ikke kombinere dem under et enkelt globalt minne.
Figur 1. Blokkdiagram av et heterogent minnesystem med tre banker
Dette heterogene minnesystemet inneholder to DDR-minnegrensesnitt og ett QDR-minnegrensesnitt.Hvis du bruker versjon 16.0, 16.0.1 eller 16.0.2 av Intel Quartus® Prime-programvaren og Altera SDK for OpenCL, håndterer OpenCL Memory Bank Divider feil minneutbrudd på tvers av adressegrenser. For å omgå dette kjente problemet, legg til en rørledningsbro med en seriestørrelse på 1 og koble dens Avalon ®Memory-Mapped (Avalon-MM) master til OpenCL Memory Bank Dividers slaveport.
Note:
Dette kjente problemet er løst i Intel Quartus Prime-programvaren og Intel FPGA SDK for OpenCL versjon 16.1.
Figur 2. Blokkdiagram av et heterogent minnesystem med tre banker med en rørledningsbro 1.4. Modifisering av Boardtest-programmet og vertskoden for din heterogene minneløsning
Bruk boardtest.cl-kjernen som følger med Intel FPGA SDK for OpenCL Custom Platform Toolkit for å teste funksjonaliteten og ytelsen til din Custom Platform.
Boardtest-programmet er en OpenCL-kjerne som lar deg teste vert-til-enhet-båndbredde, minnebåndbredde og generell funksjonalitet til din egendefinerte plattform.
- Bla til /board/ custom_platform_toolkit/tests/boardtest-katalog.
- Åpne boardtest.cl file i et tekstredigeringsprogram og tilordne en bufferplassering til hvert globalt minneargument.
For eksampde:
__kjerne ugyldig
mem_stream (__global__attribute__((buffer_location(“DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
Her er uint *src tilordnet til DDR-minne, og uint *dst er tilordnet QDR-minne. Board_spec.xml file spesifiserer egenskapene til begge minnesystemene. - For å utnytte den heterogene minneløsningen din i OpenCL-systemet ditt, endre vertskoden ved å legge til CL_MEM_HETEROGENEOUS_INTELFPGA-flagget til clCreateBuffer-kallet.
For eksampde:
ddatain = clCreateBuffer(kontekst, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(usigned) * vectorSize, NULL, &status);
Intel anbefaler på det sterkeste at du angir bufferplasseringen som et kjerneargument før du skriver bufferen. Når du bruker et enkelt globalt minne, kan du skrive bufferne enten før eller etter at du har tilordnet dem til et kjerneargument. I heterogene minnesystemer angir verten bufferplasseringen før bufferen skrives. Med andre ord vil verten kalle opp clSetKernelArgument-funksjonen før den kaller opp clEnqueueWriteBuffer-funksjonen.
I vertskoden din kaller du clCreateBuffer, clSetKernelArg og clEnqueueWriteBuffer i følgende rekkefølge:
ddatain = clCreateBuffer(kontekst, CL_MEM_READ_WRITE | memflagg |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(usigned) * vectorSize, NULL, &status);
… status = clSetKernelArg(kjerne[k], 0, sizeof(cl_mem), (void*)&ddatain);
… status = clEnqueueWriteBuffer(kø, ddatain, CL_FALSE, 0, sizeof(usigned) * vectorSize,hdatain, 0, NULL, NULL);
ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file presenterer en lignende rekkefølge av disse funksjonskallene. - Etter at du har endret boardtest.cl file og vertskoden, kompiler verts- og kjernekoden og verifiser funksjonaliteten deres.
Når du kompilerer kjernekoden din, må du deaktivere burst-interleaving av alle minnesystemer ved å inkludere –no-interleaving alternativet i aoc-kommandoen.
Relatert informasjon
Deaktivere Burst-interleaving av globalt minne (–ingen interleaving )
1.5. Verifisere funksjonaliteten til ditt heterogene minne System
For å sikre at det heterogene minnesystemet fungerer som det skal, fjerner du CL_CONTEXT_COMPILER_MODE_INTELFPGA-flagget i vertskoden.
I OpenCL-systemer med homogent minne må du velge å sette CL_CONTEXT_COMPILER_MODE_INTELFPGA=3-flagget i vertskoden for å deaktivere lesingen av .aocx file og omprogrammering av FPGA. Å sette CL_CONTEXT_COMPILER_MODE_INTELFPGA=3-flagget er nyttig når du instansierer brettet ditt for å verifisere funksjonaliteten til din egendefinerte plattform uten å designe plantegningen og spesifisere LogicLock™-områdene.
Med heterogene minnesystemer må kjøretidsmiljøet lese bufferplasseringene til hver buffer, beskrevet i .aocx file, for å verifisere minnesystemenes funksjonalitet. Det kan imidlertid være lurt å verifisere funksjonaliteten til din egendefinerte plattform uten å implementere de endelige funksjonene i tavledesignet, for eksempel å designe plantegningen og spesifisere LogicLock-regionene.
- Bekreft at CL_CONTEXT_COMPILER_MODE_INTELFPGA-flagget ikke er angitt i vertskoden.
- Bla til tavlen/ /source/host/mmd-katalogen til din egendefinerte plattform.
- Åpne den acl_pcie_device.cpp minnetilordnede enheten (MMD) file i et tekstredigeringsprogram.
- Endre omprogrammeringsfunksjonen i acl_pcie_device.cpp file ved å legge til en retur 0; linje, som vist nedenfor:
int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
{
returner 0;
// antar feil
int reprogram_failed = 1;
// antar ingen rbf eller hash i fpga.bin
int rbf_or_hash_not_provided = 1;
// antar at base- og importrevisjons-hashene ikke stemmer overens
int hash_mismatch = 1;
…
} - Rekompiler acl_pcie_device.cpp file.
- Bekreft at CL_CONTEXT_COMPILER_MODE_INTELFPGA-flagget ikke er angitt.
Oppmerksomhet: Etter at du har lagt til returnerer 0; til omprogrammeringsfunksjonen og kompiler MMD på nytt file, vil kjøretidsmiljøet lese .aocx file og tilordne bufferplasseringene, men vil ikke omprogrammere FPGA. Du må manuelt matche FPGA-bildet med .aocx file. For å reversere denne virkemåten, fjern retur 0; fra omprogrammeringsfunksjonen og kompiler MMD på nytt file.
1.6. Dokumentrevisjonshistorikk
Dato | Versjon | Endringer |
17. desember | 2017.12.01 | • Rebranded CL_MEM_HETEROGENEOUS_ALTERA til CL_MEM_HETEROGENEOUS_INTELFPGA. |
16. desember | 2016.12.13 | • Rebranded CL_CONTEXT_COMPILER_MODE_ALTERA til CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Opprette heterogene minnesystemer i Intel® FPGA SDK for OpenCL
Tilpassede plattformer
Send tilbakemelding
Online versjon
Send tilbakemelding
ID: 683654
Versjon: 2016.12.13
Dokumenter / Ressurser
![]() |
intel Oppretter heterogene minnesystemer i FPGA SDK for OpenCL Custom-plattformer [pdf] Instruksjoner Opprette heterogene minnesystemer i FPGA SDK for OpenCL Custom Platforms, Lage heterogene minnesystemer, FPGA SDK for OpenCL Custom Platforms |