intel - logotipUstvarjanje heterogenih pomnilniških sistemov v FPGA SDK za platforme po meri OpenCL
Navodila

Ustvarjanje heterogenih pomnilniških sistemov v Intel® FPGA SDK za platforme po meri OpenCL

Implementacija heterogenega pomnilnika v platformi po meri omogoča večjo pasovno širino zunanjega pomnilniškega vmesnika (EMIF) ter večje in hitrejše dostope do pomnilnika. Kombinacija heterogenega dostopa do pomnilnika z optimiziranim
Jedro OpenCL ™(1) lahko povzroči znatne izboljšave zmogljivosti vašega sistema OpenCL.
Ta opomba o aplikaciji ponuja smernice za ustvarjanje heterogenih pomnilniških sistemov v platformi po meri za uporabo z Intel® FPGA SDK za OpenCL(2). Intel predvideva, da ste izkušen oblikovalec FPGA, ki razvija platforme po meri, ki vsebujejo heterogene pomnilniške sisteme.
Pred ustvarjanjem heterogenih pomnilniških sistemov se seznanite s spodaj navedenimi dokumenti Intel FPGA SDK za OpenCL.
Povezane informacije

  • Vodnik za programiranje Intel FPGA SDK za OpenCL
  • Vodnik po najboljših praksah Intel FPGA SDK za OpenCL
  • Intel FPGA SDK for OpenCL Arria 10 GX FPGA Development Kit Reference Platform Porting Guide

1.1. Preverjanje funkcionalnosti plošče FPGA in vmesnikov EMIF

Preverite vsak pomnilniški vmesnik neodvisno in nato instanciirajte svojo platformo po meri z uporabo globalnega pomnilnika.

  1. Preverite vsak pomnilniški vmesnik z zasnovami strojne opreme, ki lahko preizkusijo hitrost in stabilnost vsakega vmesnika.
  2. Instanciirajte svojo platformo po meri z uporabo globalnega pomnilnika.
    1. Na primerample, če imate tri vmesnike DDR, mora biti eden od njih preslikan kot heterogeni pomnilnik. V tem primeru preverite delovanje sklada OpenCL z vsakim vmesnikom DDR posebej.
      OpenCL in logotip OpenCL sta blagovni znamki družbe Apple Inc., ki se uporabljata z dovoljenjem skupine Khronos Group™.
    2.  Intel FPGA SDK za OpenCL temelji na objavljeni specifikaciji Khronos in je prestal postopek testiranja skladnosti Khronos. Trenutno stanje skladnosti je na voljo na www.khronos.org/conformance.

Intel Corporation. Vse pravice pridržane. Intel, logotip Intel in druge znamke Intel so blagovne znamke družbe Intel Corporation ali njenih podružnic. Intel jamči za delovanje svojih izdelkov FPGA in polprevodnikov v skladu s trenutnimi specifikacijami v skladu z Intelovo standardno garancijo, vendar si pridržuje pravico do sprememb katerega koli izdelka in storitve kadar koli brez predhodnega obvestila. Intel ne prevzema nobene odgovornosti ali obveznosti, ki izhaja iz uporabe ali uporabe katere koli informacije, izdelka ali storitve, opisanih tukaj, razen če je Intel izrecno pisno privolil v to. Intelovim strankam svetujemo, da pridobijo najnovejšo različico specifikacij naprave, preden se zanesejo na kakršne koli objavljene informacije in preden oddajo naročila za izdelke ali storitve. *Druga imena in blagovne znamke so lahko last drugih.
ISO 9001:2015 Registriran
Če imate dva vmesnika DDR in en vmesnik s štirimi hitrostmi prenosa podatkov (QDR), preverite delovanje sklada OpenCL dveh vmesnikov DDR in vmesnika QDR neodvisno.
Intel priporoča uporabo PCI Express® – (PCIe® -) ali ekskluzivnih modelov EMIF za testiranje pomnilniških vmesnikov. Ko preverite, ali vsak pomnilniški vmesnik deluje in ali vaš dizajn OpenCL deluje s podmnožico pomnilniških vmesnikov, nadaljujte
za ustvarjanje popolnoma delujočega heterogenega pomnilniškega sistema. 
1.2. Spreminjanje board_spec.xml File
Spremenite board_spec.xml file da določite vrste heterogenih pomnilniških sistemov, ki so na voljo jedrom OpenCL.
Med prevajanjem jedra Intel FPGA SDK za OpenCL Offline Compiler dodeli argumente jedra pomnilniku na podlagi argumenta lokacije medpomnilnika, ki ga podate.
1. Poiščite board_spec.xml file v imeniku strojne opreme vaše platforme po meri.
2. Odprite board_spec.xml file v urejevalniku besedil in ustrezno spremenite XML.
Na primerample, če ima vaš sistem strojne opreme dva pomnilnika DDR kot privzeti globalni pomnilnik in dve banki QDR, ki ju modelirate kot heterogeni pomnilnik, spremenite pomnilniške odseke board_spec.xml file podobna naslednjemu:
















1.3. Nastavitev več delilnikov pomnilnika v Qsys
Trenutno razdelilnik pomnilniških bank OpenCL v zasnovi Qsys ne podpira števila pomnilniških bank brez stopnje 2, kar ni omejitev za tipične konfiguracije. Vendar pa obstajajo scenariji, kjer je potrebno število pomnilniških vmesnikov, ki ni na moči 2. Če želite prilagoditi število pomnilniških vmesnikov, ki niso na moči 2, uporabite več delilnikov pomnilniških bank OpenCL, da ustvarite heterogene pomnilniške sisteme s številom pomnilniških bank, ki niso na moči 2. Če imate resnično heterogen pomnilniški sistem, morate ustvariti več razdelilnikov pomnilniške banke OpenCL. Razmislite o sistemu z enim pomnilniškim vmesnikom DDR in enim pomnilniškim vmesnikom QDR. Ker imata obe banki različni pomnilniški topologiji, ju ne morete združiti v en globalni pomnilnik.
Slika 1. Blokovni diagram treh bank heterogenega pomnilniškega sistema
Ta heterogeni pomnilniški sistem vsebuje dva pomnilniška vmesnika DDR in en pomnilniški vmesnik QDR.intel ustvarjanje heterogenih pomnilniških sistemov v FPGA SDK za platforme po meri OpenCL - slika 1Če uporabljate različico 16.0, 16.0.1 ali 16.0.2 programske opreme Intel Quartus® Prime in Altera SDK za OpenCL, OpenCL Memory Bank Divider nepravilno obravnava izbruhe pomnilnika prek naslovnih meja. Če se želite izogniti tej znani težavi, dodajte cevovodni most z razpočno velikostjo 1 in povežite njegovo glavno enoto Avalon ®Memory-Mapped (Avalon-MM) s podrejenimi vrati delilnika pomnilniške banke OpenCL.
Opomba:
Ta znana težava je odpravljena v programski opremi Intel Quartus Prime in Intel FPGA SDK za OpenCL različice 16.1.
Slika 2. Blokovni diagram tristranskega heterogenega pomnilniškega sistema s cevovodnim mostom intel ustvarjanje heterogenih pomnilniških sistemov v FPGA SDK za platforme po meri OpenCL - slika 21.4. Spreminjanje programa Boardtest in gostiteljske kode za vašo heterogeno pomnilniško rešitev
Uporabite jedro boardtest.cl, ki je priloženo Intel FPGA SDK for OpenCL Custom Platform Toolkit, da preizkusite funkcionalnost in zmogljivost vaše prilagojene platforme.
Program boardtest je jedro OpenCL, ki vam omogoča testiranje pasovne širine od gostitelja do naprave, pasovne širine pomnilnika in splošne funkcionalnosti vaše platforme po meri.

  1. Prebrskajte do imenik /board/ custom_platform_toolkit/tests/boardtest.
  2. Odprite boardtest.cl file v urejevalniku besedil in vsakemu argumentu globalnega pomnilnika dodelite lokacijo medpomnilnika.
    Na primerample:
    __kernel void
    mem_stream (__globalni__atribut__((buffer_location(“DDR”))) uint *src, __globalni __atribut__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
    Tu je uint *src dodeljen pomnilniku DDR, uint *dst pa pomnilniku QDR. board_spec.xml file določa značilnosti obeh pomnilniških sistemov.
  3. Če želite izkoristiti svojo heterogeno pomnilniško rešitev v vašem sistemu OpenCL, spremenite kodo gostitelja tako, da svojemu klicu clCreateBuffer dodate zastavo CL_MEM_HETEROGENEOUS_INTELFPGA.
    Na primerample:
    ddatain = clCreateBuffer(kontekst, CL_MEM_READ_WRITE | memflags
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
    Intel močno priporoča, da nastavite lokacijo medpomnilnika kot argument jedra, preden napišete medpomnilnik. Ko uporabljate en globalni pomnilnik, lahko medpomnilnike zapišete pred ali po dodelitvi argumentu jedra. V heterogenih pomnilniških sistemih gostitelj nastavi lokacijo medpomnilnika, preden zapiše medpomnilnik. Z drugimi besedami, gostitelj bo poklical funkcijo clSetKernelArgument, preden bo poklical funkcijo clEnqueueWriteBuffer.
    V svoji gostiteljski kodi pokličite klice clCreateBuffer, clSetKernelArg in clEnqueueWriteBuffer v naslednjem vrstnem redu:
    ddatain = clCreateBuffer(kontekst, CL_MEM_READ_WRITE | memflags |
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
    … status = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
    … status = clEnqueueWriteBuffer(čakalna vrsta, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
    ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file predstavlja podoben vrstni red teh klicev funkcij.
  4.  Ko spremenite boardtest.cl file in kodo gostitelja, prevedite kodo gostitelja in jedra ter preverite njuno funkcionalnost.
    Ko prevajate svojo kodo jedra, morate onemogočiti rafalno prepletanje vseh pomnilniških sistemov tako, da vključite –no-interleaving možnost v ukazu aoc.

Povezane informacije
Onemogočanje rafalnega prepletanja globalnega pomnilnika (–brez prepletanja )

1.5. Preverjanje funkcionalnosti vašega heterogenega pomnilnika Sistem
Če želite zagotoviti pravilno delovanje heterogenega pomnilniškega sistema, počistite zastavico CL_CONTEXT_COMPILER_MODE_INTELFPGA v kodi gostitelja.
V sistemih OpenCL s homogenim pomnilnikom morate v kodi gostitelja nastaviti zastavico CL_CONTEXT_COMPILER_MODE_INTELFPGA=3, da onemogočite branje .aocx file in reprogramiranje FPGA. Nastavitev zastavice CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 je uporabna pri ustvarjanju primerka vaše plošče za preverjanje funkcionalnosti vaše platforme po meri brez oblikovanja tlorisa in določanja regij LogicLock™.
Pri heterogenih pomnilniških sistemih mora izvajalno okolje prebrati medpomnilniške lokacije vsakega medpomnilnika, opisane v .aocx file, za preverjanje delovanja pomnilniških sistemov. Vendar pa boste morda želeli preveriti funkcionalnost vaše platforme po meri, ne da bi implementirali končne funkcije zasnove plošče, kot je oblikovanje tlorisa in določanje regij LogicLock.

  1. Preverite, ali zastavica CL_CONTEXT_COMPILER_MODE_INTELFPGA ni nastavljena v kodi gostitelja.
  2. Prebrskaj do table/ /source/host/mmd imenik vaše platforme po meri.
  3. Odprite acl_pcie_device.cpp pomnilniško preslikano napravo (MMD) file v urejevalniku besedil.
  4.  Spremenite funkcijo ponovnega programiranja v acl_pcie_device.cpp file z dodajanjem return 0; vrstico, kot je prikazano spodaj:
    int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
    {
    vrnitev 0;
    // domneva napako
    int reprogram_failed = 1;
    // predpostavimo, da v fpga.bin ni rbf ali hash
    int rbf_or_hash_not_provided = 1;
    // predpostavimo, da se osnovna in zgoščena vrednost uvozne revizije ne ujemata
    int hash_mismatch = 1;

    }
  5. Znova prevedite acl_pcie_device.cpp file.
  6. Preverite, ali zastavica CL_CONTEXT_COMPILER_MODE_INTELFPGA ni nastavljena.
    Pozor: Ko dodate return 0; na funkcijo reprogramiranja in znova prevedite MMD file, bo izvajalno okolje prebralo .aocx file in dodeli lokacije vmesnega pomnilnika, vendar ne bo ponovno programiral FPGA. Sliko FPGA morate ročno ujemati z .aocx file. Če želite obrniti to vedenje, odstranite return 0; iz funkcije reprogramiranja in znova prevedite MMD file.

1.6. Zgodovina revizij dokumenta

Datum Različica Spremembe
17. dec 2017.12.01 • Preimenovanje CL_MEM_HETEROGENEOUS_ALTERA v CL_MEM_HETEROGENEOUS_INTELFPGA.
16. dec 2016.12.13 • Preimenovanje CL_CONTEXT_COMPILER_MODE_ALTERA v CL_CONTEXT_COMPILER_MODE_INTELFPGA.

intel - logotipUstvarjanje heterogenih pomnilniških sistemov v Intel® FPGA SDK za OpenCL
Platforme po meri
intel Ustvarjanje heterogenih pomnilniških sistemov v FPGA SDK za platforme po meri OpenCL - ikona 1 Pošlji povratne informacije
intel ustvarjanje heterogenih pomnilniških sistemov v FPGA SDK za platforme po meri OpenCL - ikona Spletna različica
intel Ustvarjanje heterogenih pomnilniških sistemov v FPGA SDK za platforme po meri OpenCL - ikona 1 Pošlji povratne informacije
ID: 683654
Različica: 2016.12.13

Dokumenti / Viri

intel Ustvarjanje heterogenih pomnilniških sistemov v FPGA SDK za platforme po meri OpenCL [pdfNavodila
Ustvarjanje heterogenih pomnilniških sistemov v FPGA SDK za platforme po meri OpenCL, ustvarjanje heterogenih pomnilniških sistemov, FPGA SDK za platforme po meri OpenCL

Reference

Pustite komentar

Vaš elektronski naslov ne bo objavljen. Obvezna polja so označena *