intel - logoStvaranje heterogenih memorijskih sustava u FPGA SDK za prilagođene platforme OpenCL
upute

Stvaranje heterogenih memorijskih sustava u Intel® FPGA SDK za prilagođene platforme OpenCL

Implementacija heterogene memorije u prilagođenoj platformi omogućuje veću propusnost sučelja vanjske memorije (EMIF), kao i veće i brže pristupe memoriji. Kombinacija heterogenog pristupa memoriji s optimiziranim
Jezgra OpenCL™(1) može rezultirati značajnim poboljšanjima performansi vašeg OpenCL sustava.
Ova bilješka o aplikaciji pruža smjernice za stvaranje heterogenih memorijskih sustava u prilagođenoj platformi za korištenje s Intel® FPGA SDK za OpenCL(2). Intel pretpostavlja da ste iskusni FPGA dizajner koji razvija prilagođene platforme koje sadrže heterogene memorijske sustave.
Prije stvaranja heterogenih memorijskih sustava, upoznajte se s dolje navedenim dokumentima Intel FPGA SDK za OpenCL.
Povezane informacije

  • Vodič za programiranje Intel FPGA SDK za OpenCL
  • Intel FPGA SDK za OpenCL Vodič za najbolje prakse
  • Intel FPGA SDK za OpenCL Arria 10 GX FPGA Development Kit Vodič za prijenos referentne platforme

1.1. Provjera funkcionalnosti FPGA ploče i EMIF sučelja

Provjerite svako memorijsko sučelje neovisno, a zatim instancirajte svoju prilagođenu platformu koristeći globalnu memoriju.

  1. Provjerite svako memorijsko sučelje pomoću dizajna hardvera koji može testirati brzinu i stabilnost svakog sučelja.
  2. Instancirajte svoju prilagođenu platformu koristeći globalnu memoriju.
    1. Na primjerample, ako imate tri DDR sučelja, jedno od njih mora biti mapirano kao heterogena memorija. U tom slučaju provjerite funkcionalnost OpenCL skupa sa svakim DDR sučeljem zasebno.
      OpenCL i logo OpenCL zaštitni su znakovi tvrtke Apple Inc. koji se koriste uz dopuštenje Khronos Group™.
    2.  Intel FPGA SDK za OpenCL temelji se na objavljenoj Khronos specifikaciji i prošao je Khronosov proces testiranja sukladnosti. Trenutačni status usklađenosti može se pronaći na www.khronos.org/conformance.

Intel Corporation. Sva prava pridržana. Intel, Intelov logotip i druge Intelove oznake zaštitni su znakovi Intel Corporation ili njegovih podružnica. Intel jamči performanse svojih FPGA i poluvodičkih proizvoda prema trenutnim specifikacijama u skladu s Intelovim standardnim jamstvom, ali zadržava pravo izmjene bilo kojeg proizvoda i usluge u bilo koje vrijeme bez prethodne najave. Intel ne preuzima nikakvu odgovornost niti obvezu proizašlu iz primjene ili upotrebe bilo koje informacije, proizvoda ili usluge opisane ovdje, osim ako je Intel izričito pismeno pristao. Intelovim kupcima savjetuje se da nabave najnoviju verziju specifikacija uređaja prije nego što se pouzdaju u bilo kakve objavljene informacije i prije naručivanja proizvoda ili usluga. *Druga imena i robne marke mogu se smatrati vlasništvom drugih.
ISO 9001:2015 Registriran
Alternativno, ako imate dva DDR sučelja i jedno sučelje s četiri brzine prijenosa podataka (QDR), provjerite funkcionalnost OpenCL skupa dva DDR sučelja i QDR sučelja neovisno.
Intel preporučuje da koristite PCI Express® – (PCIe® -) ili EMIF-ekskluzivne dizajne za testiranje vaših memorijskih sučelja. Nakon što provjerite je li svako memorijsko sučelje funkcionalno i radi li vaš OpenCL dizajn s podskupom memorijskih sučelja, nastavite
za stvaranje potpuno funkcionalnog heterogenog memorijskog sustava. 
1.2. Izmjena board_spec.xml File
Izmijenite board_spec.xml file za određivanje tipova heterogenih memorijskih sustava koji su dostupni OpenCL kernelima.
Tijekom kompilacije kernela, Intel FPGA SDK za OpenCL Offline Compiler dodjeljuje argumente kernela memoriji na temelju argumenta lokacije međuspremnika koji navedete.
1. Pregledajte board_spec.xml file u direktoriju hardvera vaše prilagođene platforme.
2. Otvorite board_spec.xml file u uređivaču teksta i u skladu s tim izmijenite XML.
Na primjerample, ako vaš hardverski sustav ima dvije DDR memorije kao zadanu globalnu memoriju i dvije QDR banke koje modelirate kao heterogenu memoriju, promijenite memorijske odjeljke board_spec.xml file sličiti sljedećem:
















1.3. Postavljanje višestrukih razdjelnika memorije u Qsys
Trenutno, OpenCL Memory Bank Divider u Qsys dizajnu ne podržava broj memorijskih banaka koji nisu na potenciji 2, što nije ograničenje za tipične konfiguracije. Međutim, postoje scenariji u kojima je potreban broj memorijskih sučelja koji nije na snagu 2. Za prilagodbu memorijskih sučelja koja nisu na 2. stupnju, koristite višestruke razdjelnike banke memorije OpenCL za stvaranje heterogenih memorijskih sustava s brojem memorijskih banaka koji nisu na 2. stupnju. Morate stvoriti više OpenCL Memory Bank Dividera kada imate pravi heterogeni memorijski sustav. Razmotrite sustav s jednim DDR memorijskim sučeljem i jednim QDR memorijskim sučeljem. Budući da dvije banke imaju različite topologije memorije, ne možete ih kombinirati pod jednu globalnu memoriju.
Slika 1. Blok dijagram heterogenog memorijskog sustava s tri banke
Ovaj heterogeni memorijski sustav sadrži dva DDR memorijska sučelja i jedno QDR memorijsko sučelje.intel Stvaranje heterogenih memorijskih sustava u FPGA SDK za OpenCL prilagođene platforme - slika 1Ako koristite verziju 16.0, 16.0.1 ili 16.0.2 softvera Intel Quartus® Prime i Altera SDK za OpenCL, OpenCL Memory Bank Divider neispravno rukuje memorijskim burstovima preko granica adresa. Da biste zaobišli ovaj poznati problem, dodajte cjevovodni most s veličinom praska od 1 i povežite njegov Avalon ®Memory-Mapped (Avalon-MM) master na pomoćni port OpenCL Memory Bank Dividera.
Bilješka:
Ovaj poznati problem riješen je u softveru Intel Quartus Prime i Intel FPGA SDK za OpenCL verziju 16.1.
Slika 2. Blok dijagram heterogenog memorijskog sustava s tri banke s cjevovodnim mostom intel Stvaranje heterogenih memorijskih sustava u FPGA SDK za OpenCL prilagođene platforme - slika 21.4. Modificiranje programa Boardtest i glavnog koda za vaše rješenje heterogene memorije
Upotrijebite kernel boardtest.cl koji dolazi s Intel FPGA SDK za OpenCL Custom Platform Toolkit za testiranje funkcionalnosti i performansi vaše prilagođene platforme.
Program boardtest je OpenCL kernel koji vam omogućuje da testirate propusnost host-uređaj, propusnost memorije i opću funkcionalnost vaše prilagođene platforme.

  1. Pregledajte do /board/ custom_platform_toolkit/tests/boardtest imenik.
  2. Otvorite boardtest.cl file u uređivaču teksta i dodijelite mjesto međuspremnika svakom argumentu globalne memorije.
    Na primjerampono:
    __jezgra prazna
    mem_stream (__global__attribute__((buffer_location(“DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
    Ovdje je uint *src dodijeljen DDR memoriji, a uint *dst QDR memoriji. board_spec.xml file specificira karakteristike oba memorijska sustava.
  3. Kako biste iskoristili svoje heterogeno memorijsko rješenje u svom OpenCL sustavu, izmijenite svoj host kod dodavanjem oznake CL_MEM_HETEROGENEOUS_INTELFPGA u vaš clCreateBuffer poziv.
    Na primjerampono:
    ddatain = clCreateBuffer(kontekst, CL_MEM_READ_WRITE | memflags
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
    Intel snažno preporučuje da postavite lokaciju međuspremnika kao argument jezgre prije pisanja međuspremnika. Kada koristite jednu globalnu memoriju, možete pisati međuspremnike ili prije ili nakon njihovog dodjeljivanja argumentu jezgre. U heterogenim memorijskim sustavima, glavno računalo postavlja lokaciju međuspremnika prije upisa u međuspremnik. Drugim riječima, glavno računalo će pozvati funkciju clSetKernelArgument prije poziva funkcije clEnqueueWriteBuffer.
    U svom host kodu pozovite pozive clCreateBuffer, clSetKernelArg i clEnqueueWriteBuffer sljedećim redoslijedom:
    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(queue, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
    ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file predstavlja sličan redoslijed ovih poziva funkcija.
  4.  Nakon što izmijenite boardtest.cl file i host kod, kompajlirajte host i kod kernela i provjerite njihovu funkcionalnost.
    Prilikom kompajliranja vašeg kernel koda, morate onemogućiti burst-interleaving svih memorijskih sustava uključivanjem –no-interleaving opciju u naredbi aoc.

Povezane informacije
Onemogućavanje burst-interleaving-a globalne memorije (–bez interleaving-a )

1.5. Provjera funkcionalnosti vaše heterogene memorije sustav
Kako biste osigurali ispravno funkcioniranje heterogenog memorijskog sustava, poništite oznaku CL_CONTEXT_COMPILER_MODE_INTELFPGA u svom host kodu.
U OpenCL sustavima s homogenom memorijom morate postaviti oznaku CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 u svom host kodu kako biste onemogućili čitanje .aocx file i reprogramiranje FPGA. Postavljanje zastavice CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 korisno je kada instancirate svoju ploču za provjeru funkcionalnosti prilagođene platforme bez dizajniranja tlocrta i određivanja LogicLock™ regija.
S heterogenim memorijskim sustavima, runtime okruženje mora čitati lokacije međuspremnika svakog međuspremnika, opisano u .aocx file, za provjeru funkcionalnosti memorijskih sustava. Međutim, možda biste željeli provjeriti funkcionalnost svoje prilagođene platforme bez implementacije konačnih značajki dizajna ploče, kao što je projektiranje tlocrta i određivanje LogicLock regija.

  1. Provjerite je li oznaka CL_CONTEXT_COMPILER_MODE_INTELFPGA poništena u vašem host kodu.
  2. Pregledajte ploču/ /source/host/mmd direktorij vaše prilagođene platforme.
  3. Otvorite acl_pcie_device.cpp memorijski mapirani uređaj (MMD) file u uređivaču teksta.
  4.  Izmijenite funkciju reprogramiranja u acl_pcie_device.cpp file dodavanjem return 0; linija, kao što je prikazano u nastavku:
    int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
    {
    povratak 0;
    // pretpostaviti neuspjeh
    int reprogram_failed = 1;
    // pretpostavlja se da u fpga.bin nema rbf-a ili hash-a
    int rbf_or_hash_not_provided = 1;
    // pretpostavimo da se osnovni i hashovi za uvozne revizije ne podudaraju
    int hash_mismatch = 1;

    }
  5. Ponovno kompajlirajte acl_pcie_device.cpp file.
  6. Provjerite ostaje li zastavica CL_CONTEXT_COMPILER_MODE_INTELFPGA nepostavljena.
    Pažnja: Nakon što dodate return 0; reprogramirati funkciju i ponovno kompajlirati MMD file, runtime okruženje će pročitati .aocx file i dodijeliti lokacije međuspremnika, ali neće reprogramirati FPGA. Morate ručno uskladiti FPGA sliku s .aocx file. Da biste poništili ovo ponašanje, uklonite return 0; iz funkcije reprogramiranja i ponovno kompajlirajte MMD file.

1.6. Povijest revizija dokumenta

Datum Verzija Promjene
17. prosinca 2017.12.01 • Promijenjeno ime CL_MEM_HETEROGENEOUS_ALTERA u CL_MEM_HETEROGENEOUS_INTELFPGA.
16. prosinca 2016.12.13 • Promijenjeno ime CL_CONTEXT_COMPILER_MODE_ALTERA u CL_CONTEXT_COMPILER_MODE_INTELFPGA.

intel - logoStvaranje heterogenih memorijskih sustava u Intel® FPGA SDK za OpenCL
Prilagođene platforme
intel Stvaranje heterogenih memorijskih sustava u FPGA SDK za OpenCL prilagođene platforme - ikona 1 Pošaljite povratne informacije
intel Stvaranje heterogenih memorijskih sustava u FPGA SDK za prilagođene platforme OpenCL - ikona Internetska inačica
intel Stvaranje heterogenih memorijskih sustava u FPGA SDK za OpenCL prilagođene platforme - ikona 1 Pošaljite povratne informacije
ID: 683654
Verzija: 2016.12.13

Dokumenti / Resursi

intel Stvaranje heterogenih memorijskih sustava u FPGA SDK za prilagođene platforme OpenCL [pdfUpute
Stvaranje heterogenih memorijskih sustava u FPGA SDK za OpenCL prilagođene platforme, Stvaranje heterogenih memorijskih sustava, FPGA SDK za OpenCL prilagođene platforme

Reference

Ostavite komentar

Vaša email adresa neće biti objavljena. Obavezna polja su označena *