intel - logoKreiranje heterogenih memorijskih sistema u FPGA SDK za OpenCL prilagođene platforme
Uputstva

Kreiranje heterogenih memorijskih sistema u Intel® FPGA SDK za OpenCL prilagođene platforme

Implementacija heterogene memorije u prilagođenoj platformi omogućava veći propusni opseg vanjskog memorijskog interfejsa (EMIF), kao i veći i brži pristup memoriji. Kombinacija heterogenog pristupa memoriji sa optimizovanim
OpenCL™(1)kernel može rezultirati značajnim poboljšanjima performansi za vaš OpenCL sistem.
Ova napomena o aplikaciji pruža smjernice za kreiranje heterogenih memorijskih sistema u prilagođenoj platformi za korištenje sa Intel® FPGA SDK za OpenCL(2). Intel pretpostavlja da ste iskusni FPGA dizajner koji razvija prilagođene platforme koje sadrže heterogene memorijske sisteme.
Prije kreiranja heterogenih memorijskih sistema, upoznajte se sa Intel FPGA SDK za OpenCL dokumente navedene u nastavku.
Povezane informacije

  • Intel FPGA SDK za OpenCL Vodič za programiranje
  • Intel FPGA SDK za OpenCL Vodič za najbolje prakse
  • Intel FPGA SDK za OpenCL Arria 10 GX FPGA razvojni komplet Referentna platforma Vodič za portiranje

1.1. Provjera funkcionalnosti FPGA ploče i EMIF interfejsa

Provjerite svaki memorijski interfejs nezavisno, a zatim instancirajte svoju prilagođenu platformu koristeći globalnu memoriju.

  1. Provjerite svaki memorijski interfejs koristeći hardverske dizajne koji mogu testirati brzinu i stabilnost svakog interfejsa.
  2. Instancirajte svoju prilagođenu platformu koristeći globalnu memoriju.
    1. Za nprampda, ako imate tri DDR interfejsa, jedno od njih mora biti mapirano kao heterogena memorija. U ovom slučaju, provjerite funkcionalnost OpenCL steka sa svakim DDR sučeljem nezavisno.
      OpenCL i OpenCL logo su zaštitni znakovi kompanije Apple Inc. koji se koriste uz dozvolu Khronos Group™.
    2.  Intel FPGA SDK za OpenCL je zasnovan na objavljenoj Khronos specifikaciji i prošao je Khronos proces testiranja usklađenosti. Trenutni status usklađenosti možete pronaći na www.khronos.org/conformance.

Intel Corporation. Sva prava zadržana. Intel, Intel logo i druge Intel oznake su zaštitni znaci Intel Corporation ili njenih podružnica. Intel garantuje performanse svojih FPGA i poluprovodničkih proizvoda u skladu sa trenutnim specifikacijama u skladu sa Intelovom standardnom garancijom, ali zadržava pravo da izvrši izmene bilo kojeg proizvoda i usluge u bilo koje vreme bez prethodne najave. Intel ne preuzima nikakvu odgovornost ili odgovornost koja proizilazi iz primene ili korišćenja bilo koje informacije, proizvoda ili usluge opisane ovde, osim ako je Intel izričito pristao u pisanoj formi. Intelovim kupcima se savjetuje da nabave najnoviju verziju specifikacija uređaja prije nego što se oslone na bilo koju objavljenu informaciju i prije naručivanja proizvoda ili usluga. *Druga imena i robne marke mogu se smatrati vlasništvom drugih.
ISO 9001:2015 Registrovan
Alternativno, ako imate dva DDR sučelja i jedno sučelje s četiri brzine prijenosa podataka (QDR), provjerite funkcionalnost OpenCL steka dva DDR sučelja i QDR sučelja nezavisno.
Intel preporučuje da koristite PCI Express® – (PCIe® -) ili ekskluzivne dizajne EMIF za testiranje memorijskih interfejsa. Nakon što potvrdite da je svako memorijsko sučelje funkcionalno i da vaš OpenCL dizajn radi s podskupom memorijskih sučelja, nastavite
za stvaranje potpuno funkcionalnog heterogenog memorijskog sistema. 
1.2. Promjena board_spec.xml File
Izmijenite board_spec.xml file da specificirate tipove heterogenih memorijskih sistema koji su dostupni OpenCL kernelima.
Tokom kompilacije kernela, Intel FPGA SDK za OpenCL Offline kompajler dodeljuje argumente kernela memoriji na osnovu argumenta lokacije bafera koji navedete.
1. Dođite do 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.
Za nprampDakle, ako vaš hardverski sistem ima dvije DDR memorije kao zadanu globalnu memoriju i dvije QDR banke koje modelirate kao heterogenu memoriju, modificirajte memorijske dijelove board_spec.xml file da liči na sljedeće:
















1.3. Postavljanje višestrukih razdjelnika memorije u Qsys
Trenutno, OpenCL razdjelnik memorijske banke u Qsys dizajnu ne podržava broj memorijskih banaka bez snage 2, što nije ograničenje za tipične konfiguracije. Međutim, postoje scenariji u kojima je neophodan broj memorijskih sučelja bez snage 2. Da biste prilagodili broj memorijskih interfejsa bez snage 2, koristite višestruke OpenCL razdjelnike memorijske banke da kreirate heterogene memorijske sisteme sa brojem memorijskih banaka bez snage 2. Morate kreirati više OpenCL razdjelnika memorijske banke kada imate istinski heterogeni memorijski sistem. Razmotrite sistem sa jednim DDR memorijskim interfejsom i jednim QDR memorijskim interfejsom. Budući da dvije banke imaju različite memorijske topologije, ne možete ih kombinirati pod jednom globalnom memorijom.
Slika 1. Blok dijagram heterogenog memorijskog sistema sa tri banke
Ovaj heterogeni memorijski sistem sadrži dva DDR memorijska interfejsa i jedan QDR memorijski interfejs.intel Kreiranje heterogenih memorijskih sistema u FPGA SDK za OpenCL prilagođene platforme - slika 1Ako koristite verziju 16.0, 16.0.1 ili 16.0.2 Intel Quartus® Prime softvera i Altera SDK za OpenCL, OpenCL Memory Bank Divideer pogrešno upravlja memorijskim rafalima preko granica adresa. Da biste zaobišli ovaj poznati problem, dodajte most cjevovoda s veličinom rafala od 1 i povežite njegov Avalon ®Memory-Mapped (Avalon-MM) master sa slave portom OpenCL Memory Bank Dividera.
Napomena:
Ovaj poznati problem je popravljen u softveru Intel Quartus Prime i Intel FPGA SDK za OpenCL verziju 16.1.
Slika 2. Blok dijagram heterogenog memorijskog sistema sa tri banke sa cevovodnim mostom intel Kreiranje heterogenih memorijskih sistema u FPGA SDK za OpenCL prilagođene platforme - slika 21.4. Izmjena programa Boardtest i koda domaćina za vaše rješenje heterogene memorije
Koristite boardtest.cl kernel koji dolazi sa Intel FPGA SDK za OpenCL Custom Platform Toolkit da testirate funkcionalnost i performanse vaše prilagođene platforme.
Program boardtest je OpenCL kernel koji vam omogućava da testirate propusni opseg od hosta do uređaja, propusni opseg memorije i opću funkcionalnost vaše prilagođene platforme.

  1. Potražite na /board/ custom_platform_toolkit/tests/boardtest direktorij.
  2. Otvorite boardtest.cl file u uređivaču teksta i dodijelite lokaciju bafera svakom argumentu globalne memorije.
    Za nprample:
    __kernel void
    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 je dodijeljen QDR memoriji. The board_spec.xml file specificira karakteristike oba memorijska sistema.
  3. Da biste iskoristili svoje heterogeno memorijsko rješenje u vašem OpenCL sistemu, modificirajte svoj host kod dodavanjem CL_MEM_HETEROGENEOUS_INTELFPGA zastavice vašem pozivu clCreateBuffer.
    Za nprample:
    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 bafera kao argument kernela prije pisanja bafera. Kada koristite jednu globalnu memoriju, možete pisati bafere prije ili nakon dodjeljivanja argumentu kernela. U heterogenim memorijskim sistemima, host postavlja lokaciju bafera prije upisivanja u bafer. Drugim riječima, domaćin će pozvati funkciju clSetKernelArgument prije nego što pozove funkciju clEnqueueWriteBuffer.
    U svom kodu domaćina 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 modifikujete boardtest.cl file i kod hosta, kompajlirajte kod hosta i kernela i provjerite njihovu funkcionalnost.
    Prilikom kompajliranja koda kernela, morate onemogućiti burst-interleaving svih memorijskih sistema uključivanjem –no-interleaving opcija u aoc komandi.

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

1.5. Provjera funkcionalnosti vašeg heterogenog pamćenja Sistem
Da osigurate da heterogeni memorijski sistem ispravno funkcionira, poništite CL_CONTEXT_COMPILER_MODE_INTELFPGA zastavicu u vašem kodu domaćina.
U OpenCL sistemima sa homogenom memorijom, morate imati opciju da postavite CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 zastavicu u vašem host kodu da onemogućite čitanje .aocx-a file i reprogramiranje FPGA. Postavljanje CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 zastavice je korisno prilikom instanciranja vaše ploče za provjeru funkcionalnosti vaše prilagođene platforme bez dizajniranja tlocrta i specificiranja LogicLock™ regija.
Sa heterogenim memorijskim sistemima, okruženje za izvršavanje mora pročitati lokacije bafera svakog bafera, opisane u .aocx file, za provjeru funkcionalnosti memorijskih sistema. Međutim, možda biste željeli provjeriti funkcionalnost vaše prilagođene platforme bez implementacije konačnih karakteristika dizajna ploče, kao što je dizajniranje tlocrta i specificiranje LogicLock regija.

  1. Provjerite je li zastavica CL_CONTEXT_COMPILER_MODE_INTELFPGA poništena u vašem kodu domaćina.
  2. Dođite do table/ /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 povratne vrijednosti 0; linija, kao što je prikazano ispod:
    int ACL_PCIE_DEVICE::reprogram (void *data, size_t data_size)
    {
    return 0;
    // pretpostaviti neuspjeh
    int reprogram_failed = 1;
    // pretpostavljamo da nema rbf ili hash u fpga.bin
    int rbf_or_hash_not_provided = 1;
    // pretpostavimo da se hešovi osnovne i uvozne revizije ne podudaraju
    int hash_mismatch = 1;

    }
  5. Ponovno kompajlirajte acl_pcie_device.cpp file.
  6. Provjerite da CL_CONTEXT_COMPILER_MODE_INTELFPGA zastavica ostaje nepostavljena.
    pažnja: Nakon što dodate vratite 0; na funkciju reprogramiranja i ponovno kompajlirajte MMD file, runtime okruženje će čitati .aocx file i dodijeliti lokacije bafera, ali neće reprogramirati FPGA. Morate ručno uskladiti FPGA sliku sa .aocx file. Da biste preokrenuli ovo ponašanje, uklonite return 0; iz funkcije reprogramiranja i ponovno kompajlirajte MMD file.

1.6. Istorija revizija dokumenta

Datum Verzija Promjene
Dec-17 2017.12.01 • Rebrandirano CL_MEM_HETEROGENEOUS_ALTERA u CL_MEM_HETEROGENEOUS_INTELFPGA.
Dec-16 2016.12.13 • Rebrandirano CL_CONTEXT_COMPILER_MODE_ALTERA u CL_CONTEXT_COMPILER_MODE_INTELFPGA.

intel - logoKreiranje heterogenih memorijskih sistema u Intel® FPGA SDK za OpenCL
Custom Platforms
intel Kreiranje heterogenih memorijskih sistema u FPGA SDK za OpenCL prilagođene platforme - ikona 1 Pošalji povratne informacije
intel Kreiranje heterogenih memorijskih sistema u FPGA SDK za OpenCL prilagođene platforme - ikona Online verzija
intel Kreiranje heterogenih memorijskih sistema u FPGA SDK za OpenCL prilagođene platforme - ikona 1 Pošalji povratne informacije
ID: 683654
Verzija: 2016.12.13

Dokumenti / Resursi

intel Kreiranje heterogenih memorijskih sistema u FPGA SDK za OpenCL prilagođene platforme [pdfUpute
Kreiranje heterogenih memorijskih sistema u FPGA SDK za OpenCL prilagođene platforme, Kreiranje heterogenih memorijskih sistema, FPGA SDK za prilagođene OpenCL platforme

Reference

Ostavite komentar

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