intel - logoHeterogeenisten muistijärjestelmien luominen FPGA SDK:ssa mukautetuille OpenCL-alustoille
Ohjeet

Heterogeenisten muistijärjestelmien luominen Intel® FPGA SDK:ssa mukautetuille OpenCL-alustoille

Heterogeenisen muistin toteuttaminen mukautetussa alustassa mahdollistaa suuremman ulkoisen muistiliitännän (EMIF) kaistanleveyden sekä suuremman ja nopeamman muistin käytön. Heterogeenisen muistin käytön ja optimoidun yhdistelmä
OpenCL™(1)-ydin voi parantaa OpenCL-järjestelmäsi suorituskykyä merkittävästi.
Tämä sovellushuomautus antaa ohjeita heterogeenisten muistijärjestelmien luomiseen mukautetussa alustassa käytettäväksi Intel® FPGA SDK for OpenCL:lle(2). Intel olettaa, että olet kokenut FPGA-suunnittelija, joka kehittää mukautettuja alustoja, jotka sisältävät heterogeenisiä muistijärjestelmiä.
Ennen kuin luot heterogeenisiä muistijärjestelmiä, tutustu alla määriteltyyn Intel FPGA SDK:hen OpenCL-asiakirjoille.
Aiheeseen liittyvät tiedot

  • Intel FPGA SDK for OpenCL-ohjelmointiopas
  • Intel FPGA SDK for OpenCL Best Practices Guide
  • Intel FPGA SDK OpenCL Arria 10 GX FPGA -kehityssarjan viitealustan siirtämisopas

1.1. FPGA-levyn ja EMIF-liitäntöjen toimivuuden tarkistaminen

Tarkista jokainen muistiliitäntä erikseen ja luo sitten mukautettu alustasi käyttämällä yleistä muistia.

  1. Tarkista jokainen muistiliitäntä käyttämällä laitteistorakenteita, jotka voivat testata kunkin liitännän nopeuden ja vakauden.
  2. Luo mukautettu alustasi käyttämällä globaalia muistia.
    1. esimampJos sinulla on kolme DDR-liitäntää, yksi niistä on kartoitettava heterogeeniseksi muistiksi. Tarkista tässä tapauksessa OpenCL-pinon toimivuus kunkin DDR-liitännän kanssa erikseen.
      OpenCL ja OpenCL-logo ovat Apple Inc:n tavaramerkkejä, joita käytetään Khronos Group™:n luvalla.
    2.  Intel FPGA SDK for OpenCL perustuu julkaistuun Khronos-spesifikaatioon ja on läpäissyt Khronosin vaatimustenmukaisuustestausprosessin. Nykyinen vaatimustenmukaisuustila löytyy osoitteesta www.khronos.org/conformance.

Intel Corporation. Kaikki oikeudet pidätetään. Intel, Intel-logo ja muut Intel-merkit ovat Intel Corporationin tai sen tytäryhtiöiden tavaramerkkejä. Intel takaa FPGA- ja puolijohdetuotteidensa suorituskyvyn nykyisten vaatimusten mukaisesti Intelin vakiotakuun mukaisesti, mutta pidättää oikeuden tehdä muutoksia tuotteisiin ja palveluihin milloin tahansa ilman erillistä ilmoitusta. Intel ei ota minkään tässä kuvatun tiedon, tuotteen tai palvelun soveltamisesta tai käytöstä johtuvaa vastuuta tai vastuuta, paitsi jos Intel on nimenomaisesti kirjallisesti hyväksynyt. Intelin asiakkaita kehotetaan hankkimaan uusin versio laitteen teknisistä tiedoista ennen kuin he luottavat julkaistuihin tietoihin ja ennen kuin he tilaavat tuotteita tai palveluita. *Muut nimet ja tuotemerkit voidaan väittää muiden omaisuudeksi.
ISO 9001: 2015 rekisteröity
Vaihtoehtoisesti, jos sinulla on kaksi DDR-liitäntää ja yksi quad data rate (QDR) -liitäntä, tarkista kahden DDR-liitännän OpenCL-pinon ja QDR-liitännän toimivuus erikseen.
Intel suosittelee, että käytät PCI Express® – (PCIe® -) tai EMIF-yksinomaisia ​​malleja muistiliitäntöjen testaamiseen. Kun olet varmistanut, että jokainen muistiliitäntä toimii ja että OpenCL-suunnitelmasi toimii muistiliitäntöjen osajoukon kanssa, jatka
luoda täysin toimiva heterogeeninen muistijärjestelmä. 
1.2. Board_spec.xml:n muokkaaminen File
Muokkaa board_spec.xml-tiedostoa file määrittää heterogeenisten muistijärjestelmien tyypit, jotka ovat käytettävissä OpenCL-ytimille.
Ytimen kääntämisen aikana Intel FPGA SDK for OpenCL Offline Compiler määrittää ytimen argumentit muistiin määrittämäsi puskurin sijaintiargumentin perusteella.
1. Selaa tiedostoon board_spec.xml file mukautetun alustasi laitteistohakemistossa.
2. Avaa board_spec.xml file tekstieditorissa ja muokkaa XML:ää vastaavasti.
esimampjos laitteistojärjestelmässäsi on kaksi DDR-muistia oletusarvoisena globaalina muistina ja kaksi QDR-pankkia, jotka mallinnat heterogeeniseksi muistiksi, muokkaa board_spec.xml:n muistiosia file muistuttaa seuraavia:
















1.3. Useiden muistinjakajien määrittäminen Qsysissä
Tällä hetkellä Qsys-mallin OpenCL-muistipankkijakaja ei tue muistipankkien määrää ilman tehoa, mikä ei ole rajoitus tyypillisille kokoonpanoille. On kuitenkin tilanteita, joissa muistiliitäntöjä tarvitaan ilman tehoa 2. Muodostaaksesi ei-teho-of-2 muistiliitäntöjä, käytä useita OpenCL-muistipankkijakajia luodaksesi heterogeenisiä muistijärjestelmiä, joissa ei ole 2-tehoisia muistipankkeja. Sinun on luotava useita OpenCL-muistipankkijakajia, kun sinulla on todellinen heterogeeninen muistijärjestelmä. Harkitse järjestelmää, jossa on yksi DDR-muistiliitäntä ja yksi QDR-muistiliitäntä. Koska kahdella pankilla on erilaiset muistitopologiat, niitä ei voi yhdistää yhden globaalin muistin alle.
Kuva 1. Kolmen pankin heterogeenisen muistijärjestelmän lohkokaavio
Tämä heterogeeninen muistijärjestelmä sisältää kaksi DDR-muistiliitäntää ja yhden QDR-muistirajapinnan.intel Heterogeenisten muistijärjestelmien luominen FPGA SDK:ssa mukautetuille OpenCL-alustoille - kuva 1Jos käytät Intel Quartus® Prime -ohjelmiston versiota 16.0, 16.0.1 tai 16.0.2 ja Altera SDK for OpenCL, OpenCL Memory Bank Divider käsittelee väärin osoiterajojen yli olevia muistipurskeita. Voit kiertää tämän tunnetun ongelman lisäämällä liukuhihnasillan, jonka purskekoko on 1, ja liittämällä sen Avalon ®Memory-Mapped (Avalon-MM) -isäntälaitteen OpenCL-muistipankin jakajan orjaporttiin.
Huomautus:
Tämä tunnettu ongelma on korjattu Intel Quartus Prime -ohjelmistossa ja Intel FPGA SDK:ssa OpenCL-versiolle 16.1.
Kuva 2. Lohkokaavio kolmen pankin heterogeenisestä muistijärjestelmästä, jossa on putkisilta intel Heterogeenisten muistijärjestelmien luominen FPGA SDK:ssa mukautetuille OpenCL-alustoille - kuva 21.4. Heterogeenisen muistiratkaisusi Boardtest-ohjelman ja isäntäkoodin muokkaaminen
Käytä Boardtest.cl-ydintä, joka tulee Intel FPGA SDK for OpenCL Custom Platform Toolkit -sovelluksen mukana, testataksesi mukautetun alustasi toimivuutta ja suorituskykyä.
Boardtest-ohjelma on OpenCL-ydin, jonka avulla voit testata isännästä laitteeseen kaistanleveyttä, muistin kaistanleveyttä ja mukautetun alustasi yleisiä toimintoja.

  1. Selaa kohtaan /board/ custom_platform_toolkit/tests/boardtest-hakemisto.
  2. Avaa boardtest.cl file tekstieditorissa ja määritä puskurin sijainti kullekin yleisen muistin argumentille.
    esimampseuraavat:
    __ydin tyhjä
    mem_stream (__global__attribute__((puskurin_sijainti("DDR"))) uint *src, __global __attribute__((puskurin_sijainti("QDR"))) uint *dst, uint arg, uint arg2)
    Tässä uint *src on määritetty DDR-muistille ja uint *dst on määritetty QDR-muistille. Board_spec.xml file määrittää molempien muistijärjestelmien ominaisuudet.
  3. Hyödynnä heterogeenista muistiratkaisuasi OpenCL-järjestelmässäsi muokkaamalla isäntäkoodiasi lisäämällä CL_MEM_HETEROGENEOUS_INTELFPGA-lippu clCreateBuffer-kutsuusi.
    esimampseuraavat:
    ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | muistiliput
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(signed) * vectorSize, NULL, &status);
    Intel suosittelee vahvasti, että asetat puskurin sijainnin ytimen argumentiksi ennen puskurin kirjoittamista. Kun käytät yhtä globaalia muistia, voit kirjoittaa puskurit joko ennen niiden määrittämistä ytimen argumentille tai sen jälkeen. Heterogeenisissa muistijärjestelmissä isäntä asettaa puskurin sijainnin ennen puskurin kirjoittamista. Toisin sanoen isäntä kutsuu clSetKernelArgument-funktiota ennen clEnqueueWriteBuffer-funktion kutsumista.
    Kutsu isäntäkoodissasi clCreateBuffer-, clSetKernelArg- ja clEnqueueWriteBuffer-kutsut seuraavassa järjestyksessä:
    ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | memflags |
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(signed) * vectorSize, NULL, &status);
    … tila = clSetKernelArg(ydin[k], 0, koko(cl_mem), (void*)&ddatain);
    … status = clEnqueueWriteBuffer(jono, ddatain, CL_FALSE, 0, koko(allekirjoittamaton) * vektorin koko,hdatain, 0, NULL, NULL);
    ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file esittää samanlaisen järjestyksen näistä funktiokutsuista.
  4.  Kun olet muokannut boardtest.cl file ja isäntäkoodi, käännä isäntä- ja ydinkoodi ja tarkista niiden toimivuus.
    Kun käännät ytimen koodia, sinun on poistettava kaikkien muistijärjestelmien purske-lomitus sisällyttämällä -no-interleaving vaihtoehto aoc-komennossa.

Aiheeseen liittyvät tiedot
Globaalin muistin purske-lomitus (-ei-lomitus )

1.5. Heterogeenisen muistisi toimivuuden tarkistaminen Järjestelmä
Varmistaaksesi, että heterogeeninen muistijärjestelmä toimii oikein, poista CL_CONTEXT_COMPILER_MODE_INTELFPGA-lippu isäntäkoodissasi.
OpenCL-järjestelmissä, joissa on homogeeninen muisti, sinun on asetettava CL_CONTEXT_COMPILER_MODE_INTELFPGA=3-lippu isäntäkoodissasi estääksesi .aocx:n lukemisen file ja FPGA:n uudelleenohjelmointi. Lipun CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 asettaminen on hyödyllistä luotaessa korttia, jotta voit varmistaa mukautetun alustasi toimivuuden ilman pohjapiirroksen suunnittelua ja LogicLock™-alueiden määrittämistä.
Heterogeenisissa muistijärjestelmissä ajonaikaisen ympäristön on luettava kunkin puskurin puskuripaikat, jotka on kuvattu .aocx-tiedostossa. file, tarkistaaksesi muistijärjestelmien toimivuuden. Voit kuitenkin haluta varmistaa mukautetun alustasi toimivuuden toteuttamatta laudan suunnittelun lopullisia ominaisuuksia, kuten pohjapiirroksen suunnittelua ja LogicLock-alueiden määrittämistä.

  1. Varmista, että CL_CONTEXT_COMPILER_MODE_INTELFPGA-lippu ei ole asetettu isäntäkoodissasi.
  2. Selaa taululle/ /source/host/mmd mukautetun alustasi hakemistosta.
  3. Avaa acl_pcie_device.cpp muistikartoitettu laite (MMD) file tekstieditorissa.
  4.  Muokkaa uudelleenohjelmointitoimintoa tiedostossa acl_pcie_device.cpp file lisäämällä palautus 0; rivi, kuten alla:
    int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
    {
    paluu 0;
    // oletetaan epäonnistumista
    int reprogram_failed = 1;
    // oletetaan, ettei fpga.bin-tiedostossa ole rbf:tä tai hashia
    int rbf_or_hash_not_provided = 1;
    // oletetaan, että perus- ja tuontiversioiden tiivisteet eivät täsmää
    int hash_mismatch = 1;

    }
  5. Käännä tiedosto acl_pcie_device.cpp uudelleen file.
  6. Varmista, että CL_CONTEXT_COMPILER_MODE_INTELFPGA-lippu ei ole asetettu.
    Huomio: Kun olet lisännyt palautusarvon 0; uudelleenohjelmointitoimintoon ja käännä MMD uudelleen file, ajonaikainen ympäristö lukee .aocx-tiedoston file ja määrittää puskurin sijainnit, mutta ei ohjelmoi FPGA:ta uudelleen. Sinun on yhdistettävä FPGA-kuva manuaalisesti .aocx-tiedostoon file. Kääntääksesi tämän toiminnan, poista return 0; uudelleenohjelmoinnista ja käännä MMD uudelleen file.

1.6. Asiakirjan versiohistoria

Päivämäärä Versio Muutokset
joulukuuta-17 2017.12.01 • Brändi CL_MEM_HETEROGENEOUS_ALTERA muotoon CL_MEM_HETEROGENEOUS_INTELFPGA.
joulukuuta-16 2016.12.13 • Brändi CL_CONTEXT_COMPILER_MODE_ALTERA muotoon CL_CONTEXT_COMPILER_MODE_INTELFPGA.

intel - logoHeterogeenisten muistijärjestelmien luominen Intel® FPGA SDK:ssa OpenCL:lle
Mukautetut alustat
intel Heterogeenisten muistijärjestelmien luominen FPGA SDK:ssa mukautetuille OpenCL-alustoille - icon 1 Lähetä palautetta
intel Heterogeenisten muistijärjestelmien luominen FPGA SDK:ssa mukautetuille OpenCL-alustoille - kuvake Online-versio
intel Heterogeenisten muistijärjestelmien luominen FPGA SDK:ssa mukautetuille OpenCL-alustoille - icon 1 Lähetä palautetta
ID: 683654
Versio: 2016.12.13

Asiakirjat / Resurssit

intel Heterogeenisten muistijärjestelmien luominen FPGA SDK:ssa mukautetuille OpenCL-alustoille [pdfOhjeet
Heterogeenisten muistijärjestelmien luominen FPGA SDK:ssa mukautetuille OpenCL-alustoille, Heterogeenisten muistijärjestelmien luominen, FPGA SDK mukautetuille OpenCL-alustoille

Viitteet

Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *