Skep heterogene geheuestelsels in FPGA SDK vir OpenCL Custom Platforms
Instruksies
Skep heterogene geheuestelsels in Intel® FPGA SDK vir OpenCL Custom Platforms
Die implementering van heterogene geheue in 'n pasgemaakte platform maak voorsiening vir meer eksterne geheue koppelvlak (EMIF) bandwydte sowel as groter en vinniger geheue toegang. Die kombinasie van heterogene geheue toegang met 'n geoptimaliseerde
OpenCL ™(1)-kern kan aansienlike prestasieverbeterings vir jou OpenCL-stelsel tot gevolg hê.
Hierdie toepassingsnota verskaf leiding oor die skep van heterogene geheuestelsels in 'n pasgemaakte platform vir gebruik met die Intel® FPGA SDK vir OpenCL(2). Intel neem aan dat jy 'n ervare FPGA-ontwerper is wat pasgemaakte platforms ontwikkel wat heterogene geheuestelsels bevat.
Voordat u die heterogene geheuestelsels skep, moet u uself vertroud maak met die Intel FPGA SDK vir OpenCL-dokumente wat hieronder gespesifiseer word.
Verwante inligting
- Intel FPGA SDK vir OpenCL-programmeringsgids
- Intel FPGA SDK vir OpenCL Beste Praktyke Gids
- Intel FPGA SDK vir OpenCL Arria 10 GX FPGA Development Kit Verwysing Platform Porting Guide
1.1. Verifieer die funksionaliteit van die FPGA-raad en die EMIF-koppelvlakke
Verifieer elke geheue-koppelvlak onafhanklik en instansieer dan jou persoonlike platform deur globale geheue te gebruik.
- Verifieer elke geheue-koppelvlak deur hardeware-ontwerpe te gebruik wat die spoed en stabiliteit van elke koppelvlak kan toets.
- Stel jou persoonlike platform voor deur globale geheue te gebruik.
- Byvoorbeeldample, as jy drie DDR-koppelvlakke het, moet een van hulle as heterogene geheue gekarteer word. In hierdie geval, verifieer die funksionaliteit van die OpenCL-stapel met elke DDR-koppelvlak onafhanklik.
OpenCL en die OpenCL-logo is handelsmerke van Apple Inc. wat met toestemming van die Khronos Group™ gebruik word. - Die Intel FPGA SDK vir OpenCL is gebaseer op 'n gepubliseerde Khronos-spesifikasie, en het die Khronos-konformiteitstoetsproses geslaag. Huidige voldoeningstatus kan gevind word by www.khronos.org/conformance.
- Byvoorbeeldample, as jy drie DDR-koppelvlakke het, moet een van hulle as heterogene geheue gekarteer word. In hierdie geval, verifieer die funksionaliteit van die OpenCL-stapel met elke DDR-koppelvlak onafhanklik.
Intel Corporation. Alle regte voorbehou. Intel, die Intel-logo en ander Intel-merke is handelsmerke van Intel Corporation of sy filiale. Intel waarborg prestasie van sy FPGA- en halfgeleierprodukte volgens huidige spesifikasies in ooreenstemming met Intel se standaardwaarborg, maar behou die reg voor om enige tyd sonder kennisgewing veranderinge aan enige produkte en dienste aan te bring. Intel aanvaar geen verantwoordelikheid of aanspreeklikheid wat voortspruit uit die toepassing of gebruik van enige inligting, produk of diens wat hierin beskryf word nie, behalwe soos uitdruklik skriftelik deur Intel ooreengekom. Intel-kliënte word aangeraai om die nuutste weergawe van toestelspesifikasies te bekom voordat hulle op enige gepubliseerde inligting staatmaak en voordat bestellings vir produkte of dienste geplaas word. *Ander name en handelsmerke kan as die eiendom van ander geëis word.
ISO 9001:2015 Geregistreer
Alternatiewelik, as jy twee DDR-koppelvlakke en een quad data rate (QDR)-koppelvlak het, verifieer die funksionaliteit van die OpenCL-stapel van die twee DDR-koppelvlakke en die QDR-koppelvlak onafhanklik.
Intel beveel aan dat jy PCI Express® – (PCIe® -) of EMIF-eksklusiewe ontwerpe gebruik om jou geheue-koppelvlakke te toets. Nadat jy geverifieer het dat elke geheue-koppelvlak funksioneel is en dat jou OpenCL-ontwerp met 'n subset van die geheue-koppelvlakke werk, gaan voort
om 'n ten volle funksionele heterogene geheuestelsel te skep.
1.2. Wysiging van die board_spec.xml File
Verander die board_spec.xml file om die tipes heterogene geheuestelsels wat vir die OpenCL-pitte beskikbaar is, te spesifiseer.
Tydens kernsamestelling ken die Intel FPGA SDK vir OpenCL Offline Compiler kernargumente aan 'n geheue toe gebaseer op die bufferliggingsargument wat jy spesifiseer.
1. Blaai na die board_spec.xml file in die hardeware-gids van jou persoonlike platform.
2. Maak die board_spec.xml oop file in 'n teksredigeerder en wysig die XML dienooreenkomstig.
Byvoorbeeldample, as jou hardewarestelsel twee DDR-geheue het as verstek globale geheue en twee QDR-banke wat jy as heterogene geheue modelleer, wysig die geheueafdelings van die board_spec.xml file om soos volg te lyk:
1.3. Stel veelvuldige geheueverdelers op in Qsys
Tans ondersteun die OpenCL Memory Bank Divider in die Qsys-ontwerp nie nie-krag-van-2 aantal geheuebanke nie, wat nie 'n beperking is vir tipiese konfigurasies nie. Daar is egter scenario's waar nie-krag-van-2 aantal geheue-koppelvlakke nodig is. Om nie-krag-van-2-getal geheue-koppelvlakke te akkommodeer, gebruik verskeie OpenCL Memory Bank Dividers om heterogene geheuestelsels te skep met nie-krag-van-2 aantal geheuebanke. Jy moet verskeie OpenCL Memory Bank Dividers skep wanneer jy 'n ware heterogene geheuestelsel het. Oorweeg 'n stelsel met een DDR geheue koppelvlak en een QDR geheue koppelvlak. Omdat die twee banke verskillende geheuetopologieë het, kan jy hulle nie onder 'n enkele globale geheue kombineer nie.
Figuur 1. Blokdiagram van 'n Drie-Bank Heterogene Memory System
Hierdie heterogene geheuestelsel bevat twee DDR-geheue-koppelvlakke en een QDR-geheue-koppelvlak.As jy weergawe 16.0, 16.0.1 of 16.0.2 van die Intel Quartus® Prime-sagteware en die Altera SDK vir OpenCL gebruik, hanteer die OpenCL Memory Bank Divider geheue-uitbarstings oor adresgrense heen. Om hierdie bekende probleem te omseil, voeg 'n pyplynbrug met 'n sarsiegrootte van 1 by en koppel sy Avalon ®Memory-Mapped (Avalon-MM) meester aan die OpenCL Memory Bank Divider se slawepoort.
Let wel:
Hierdie bekende probleem is opgelos in die Intel Quartus Prime-sagteware en die Intel FPGA SDK vir OpenCL weergawe 16.1.
Figuur 2. Blokdiagram van 'n Drie-Bank heterogene geheuestelsel met 'n pyplynbrug 1.4. Wysiging van die Boardtest-program en die gasheerkode vir u heterogene geheue-oplossing
Gebruik die boardtest.cl kern wat saam met die Intel FPGA SDK vir OpenCL Custom Platform Toolkit kom om die funksionaliteit en werkverrigting van jou Custom Platform te toets.
Die bordtoetsprogram is 'n OpenCL-kern wat jou toelaat om gasheer-tot-toestel-bandwydte, geheue-bandwydte en algemene funksionaliteit van jou persoonlike platform te toets.
- Blaai na die /board/ custom_platform_toolkit/tests/boardtest gids.
- Maak die bordtoets oop.cl file in 'n teksredigeerder en ken 'n bufferligging aan elke globale geheue-argument toe.
Byvoorbeeldample:
__kern leeg
mem_stream (__global__attribute__((buffer_location(“DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
Hier word uint *src aan DDR-geheue toegewys, en uint *dst word aan QDR-geheue toegewys. Die bord_spec.xml file spesifiseer die kenmerke van beide geheuestelsels. - Om jou heterogene geheue-oplossing in jou OpenCL-stelsel te benut, verander jou gasheerkode deur die CL_MEM_HETEROGENEOUS_INTELFPGA-vlag by jou clCreateBuffer-oproep te voeg.
Byvoorbeeldample:
ddatain = clCreateBuffer(konteks, CL_MEM_READ_WRITE | memvlae
CL_MEM_HETEROGENEOUS_INTELFPGA, grootte van (ongeteken) * vektorgrootte, NULL, &status);
Intel beveel sterk aan dat u die bufferligging as 'n kernargument stel voordat u die buffer skryf. As u 'n enkele globale geheue gebruik, kan u die buffers skryf óf voor óf nadat dit aan 'n kernargument toegewys is. In heterogene geheuestelsels stel die gasheer die bufferligging voordat die buffer geskryf word. Met ander woorde, die gasheer sal die clSetKernelArgument-funksie oproep voordat die clEnqueueWriteBuffer-funksie opgeroep word.
In jou gasheerkode, roep die clCreateBuffer-, clSetKernelArg- en clEnqueueWriteBuffer-oproepe in die volgende volgorde:
ddatain = clCreateBuffer(konteks, CL_MEM_READ_WRITE | memvlae |
CL_MEM_HETEROGENEOUS_INTELFPGA, grootte van (ongeteken) * vektorgrootte, NULL, &status);
… status = clSetKernelArg(kern[k], 0, sizeof(cl_mem), (void*)&ddatain);
… status = clEnqueueWriteBuffer(queue, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
Die ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file bied 'n soortgelyke volgorde van hierdie funksie-oproepe aan. - Nadat jy die boardtest.cl file en die gasheerkode, stel die gasheer- en kernkode saam en verifieer hul funksionaliteit.
Wanneer jy jou kernkode saamstel, moet jy burst-interleaving van alle geheuestelsels deaktiveer deur die –no-interleaving in te sluit opsie in die aoc-opdrag.
Verwante inligting
Deaktiveer Burst-Interleaving van Global Memory (-geen-interleaving )
1.5. Verifieer die funksionaliteit van jou heterogene geheue Stelsel
Om te verseker dat die heterogene geheuestelsel behoorlik funksioneer, ontstel die CL_CONTEXT_COMPILER_MODE_INTELFPGA-vlag in jou gasheerkode.
In OpenCL-stelsels met homogene geheue, moet jy die CL_CONTEXT_COMPILER_MODE_INTELFPGA=3-vlag in jou gasheerkode stel om die lees van die .aocx te deaktiveer file en die herprogrammering van die FPGA. Die opstel van die CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 vlag is nuttig wanneer u bord instansieer om die funksionaliteit van u pasgemaakte platform te verifieer sonder om die vloerplan te ontwerp en die LogicLock™-streke te spesifiseer.
Met heterogene geheuestelsels moet die looptydomgewing die bufferliggings van elke buffer lees, beskryf in die .aocx file, om die geheuestelsels se funksionaliteit te verifieer. U wil egter dalk die funksionaliteit van u pasgemaakte platform verifieer sonder om die finale kenmerke van die bordontwerp te implementeer, soos om die vloerplan te ontwerp en die LogicLock-streke te spesifiseer.
- Verifieer dat die CL_CONTEXT_COMPILER_MODE_INTELFPGA-vlag nie in jou gasheerkode gestel is nie.
- Blaai na die bord/ /source/host/mmd gids van jou persoonlike platform.
- Maak die acl_pcie_device.cpp geheue-gekarteerde toestel (MMD) oop file in 'n teksredigeerder.
- Verander die herprogrammeerfunksie in die acl_pcie_device.cpp file deur 'n opbrengs 0 by te voeg; lyn, soos hieronder getoon:
int ACL_PCIE_DEVICE::herprogram(void *data, size_t data_size)
{
terugkeer 0;
// aanvaar mislukking
int herprogram_misluk = 1;
// aanvaar geen rbf of hash in fpga.bin nie
int rbf_or_hash_not_provided = 1;
// neem aan dat basis- en invoerhersienings-hashes nie ooreenstem nie
int hash_mismatch = 1;
…
} - Herstel die acl_pcie_device.cpp file.
- Verifieer dat die CL_CONTEXT_COMPILER_MODE_INTELFPGA-vlag ongesteld bly.
Aandag: Nadat jy bygevoeg het terugkeer 0; na die herprogrammeerfunksie en hersaamstel die MMD file, sal die looptyd-omgewing die .aocx lees file en ken die bufferliggings toe, maar sal nie die FPGA herprogrammeer nie. Jy moet die FPGA-beeld met die hand pas by die .aocx file. Om hierdie gedrag om te keer, verwyder terugkeer 0; vanaf die herprogrammeerfunksie en hersaamstel die MMD file.
1.6. Dokumenthersieningsgeskiedenis
Datum | Weergawe | Veranderinge |
Des-17 | 2017.12.01 | • Herhandel CL_MEM_HETEROGENEOUS_ALTERA na CL_MEM_HETEROGENEOUS_INTELFPGA. |
Des-16 | 2016.12.13 | • Herhandel CL_CONTEXT_COMPILER_MODE_ALTERA na CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Skep heterogene geheuestelsels in Intel® FPGA SDK vir OpenCL
Pasgemaakte platforms
Stuur terugvoer
Aanlyn weergawe
Stuur terugvoer
ID: 683654
Weergawe: 2016.12.13
Dokumente / Hulpbronne
![]() |
intel Die skep van heterogene geheuestelsels in FPGA SDK vir OpenCL Custom Platforms [pdf] Instruksies Skep heterogene geheuestelsels in FPGA SDK vir OpenCL Custom Platforms, Skep heterogene Memory Systems, FPGA SDK vir OpenCL Custom Platforms |