Crearea de sisteme de memorie eterogene în FPGA SDK pentru platformele personalizate OpenCL
Instrucţiuni
Crearea de sisteme de memorie eterogene în Intel® FPGA SDK pentru platformele personalizate OpenCL
Implementarea memoriei eterogene într-o platformă personalizată permite o lățime de bandă mai mare a interfeței de memorie externă (EMIF), precum și accesări mai mari și mai rapide la memorie. Combinația de acces la memorie eterogenă cu o memorie optimizată
Nucleul OpenCL ™(1) poate duce la îmbunătățiri semnificative ale performanței sistemului dumneavoastră OpenCL.
Această notă de aplicație oferă îndrumări cu privire la crearea sistemelor de memorie eterogene într-o platformă personalizată pentru utilizare cu Intel® FPGA SDK pentru OpenCL(2). Intel presupune că sunteți un designer FPGA cu experiență, care dezvoltă platforme personalizate care conțin sisteme de memorie eterogene.
Înainte de a crea sisteme de memorie eterogene, familiarizați-vă cu Intel FPGA SDK pentru documentele OpenCL specificate mai jos.
Informații conexe
- Ghid de programare Intel FPGA SDK pentru OpenCL
- Ghid de bune practici Intel FPGA SDK pentru OpenCL
- Intel FPGA SDK pentru OpenCL Arria 10 GX FPGA Development Kit Reference Platform Porting Guide
1.1. Verificarea funcționalității plăcii FPGA și a interfețelor EMIF
Verificați fiecare interfață de memorie în mod independent și apoi instanțiați Platforma personalizată folosind memoria globală.
- Verificați fiecare interfață de memorie folosind modele hardware care pot testa viteza și stabilitatea fiecărei interfețe.
- Instanciați-vă platforma personalizată folosind memoria globală.
- De example, dacă aveți trei interfețe DDR, una dintre ele trebuie mapată ca memorie eterogenă. În acest caz, verificați funcționalitatea stivei OpenCL cu fiecare interfață DDR în mod independent.
OpenCL și sigla OpenCL sunt mărci comerciale ale Apple Inc. utilizate cu permisiunea Khronos Group™. - SDK-ul Intel FPGA pentru OpenCL se bazează pe o specificație Khronos publicată și a trecut procesul de testare a conformității Khronos. Starea actuală de conformitate poate fi găsită la www.khronos.org/conformance.
- De example, dacă aveți trei interfețe DDR, una dintre ele trebuie mapată ca memorie eterogenă. În acest caz, verificați funcționalitatea stivei OpenCL cu fiecare interfață DDR în mod independent.
Intel Corporation. Toate drepturile rezervate. Intel, sigla Intel și alte mărci Intel sunt mărci comerciale ale Intel Corporation sau ale subsidiarelor sale. Intel garantează performanța produselor sale FPGA și semiconductoare conform specificațiilor actuale, în conformitate cu garanția standard Intel, dar își rezervă dreptul de a face modificări oricăror produse și servicii în orice moment, fără notificare. Intel nu își asumă nicio responsabilitate sau răspundere care decurge din aplicarea sau utilizarea oricăror informații, produse sau servicii descrise aici, cu excepția cazului în care Intel a convenit în mod expres în scris. Clienții Intel sunt sfătuiți să obțină cea mai recentă versiune a specificațiilor dispozitivului înainte de a se baza pe orice informații publicate și înainte de a plasa comenzi pentru produse sau servicii. *Alte nume și mărci pot fi revendicate ca fiind proprietatea altora.
Înregistrat ISO 9001: 2015
Alternativ, dacă aveți două interfețe DDR și o interfață quad data rate (QDR), verificați independent funcționalitatea stivei OpenCL a celor două interfețe DDR și a interfeței QDR.
Intel vă recomandă să utilizați modele PCI Express® – (PCIe® -) sau exclusiv EMIF pentru a vă testa interfețele de memorie. După ce verificați că fiecare interfață de memorie este funcțională și că designul dvs. OpenCL funcționează cu un subset de interfețe de memorie, continuați
pentru a crea un sistem de memorie eterogen complet funcțional.
1.2. Modificarea board_spec.xml File
Modificați board_spec.xml file pentru a specifica tipurile de sisteme de memorie eterogene care sunt disponibile pentru nucleele OpenCL.
În timpul compilării nucleului, Intel FPGA SDK pentru OpenCL Offline Compiler atribuie argumente kernel unei memorie pe baza argumentului locației tampon pe care îl specificați.
1. Navigați la board_spec.xml file în directorul hardware al platformei dvs. personalizate.
2. Deschideți board_spec.xml file într-un editor de text și modificați XML în consecință.
De exampdacă sistemul dvs. hardware are două memorii DDR ca memorie globală implicită și două bănci QDR pe care le modelați ca memorie eterogenă, modificați secțiunile de memorie din board_spec.xml file să semene cu următoarele:
1.3. Configurarea mai multor divizoare de memorie în Qsys
În prezent, OpenCL Memory Bank Divider din designul Qsys nu acceptă un număr non-power-of-2 de bănci de memorie, ceea ce nu este o limitare pentru configurațiile tipice. Cu toate acestea, există scenarii în care este necesar un număr de interfețe de memorie non-power-of-2. Pentru a găzdui un număr non-power-of-2 de interfețe de memorie, utilizați mai multe OpenCL Memory Bank Dividers pentru a crea sisteme de memorie eterogene cu un număr non-power-of-2 de bănci de memorie. Trebuie să creați mai multe OpenCL Memory Bank Dividers atunci când aveți un sistem de memorie adevărat eterogen. Luați în considerare un sistem cu o interfață de memorie DDR și o interfață de memorie QDR. Deoarece cele două bănci au topologii de memorie diferite, nu le puteți combina într-o singură memorie globală.
Figura 1. Diagrama bloc a unui sistem de memorie eterogene cu trei bănci
Acest sistem de memorie eterogen conține două interfețe de memorie DDR și o interfață de memorie QDR.Dacă utilizați versiunea 16.0, 16.0.1 sau 16.0.2 a software-ului Intel Quartus® Prime și Altera SDK pentru OpenCL, OpenCL Memory Bank Divider gestionează incorect exploziile de memorie dincolo de limitele adreselor. Pentru a rezolva această problemă cunoscută, adăugați o punte de conductă cu o dimensiune de explozie de 1 și conectați masterul său Avalon ®Memory-Mapped (Avalon-MM) la portul slave al OpenCL Memory Bank Divider.
Nota:
Această problemă cunoscută este remediată în software-ul Intel Quartus Prime și în Intel FPGA SDK pentru OpenCL versiunea 16.1.
Figura 2. Diagrama bloc a unui sistem de memorie eterogen cu trei bănci cu o punte de conductă 1.4. Modificarea programului Boardtest și a codului gazdă pentru soluția dvs. de memorie eterogenă
Utilizați nucleul boardtest.cl care vine cu Intel FPGA SDK pentru OpenCL Custom Platform Toolkit pentru a testa funcționalitatea și performanța platformei dvs. personalizate.
Programul boardtest este un nucleu OpenCL care vă permite să testați lățimea de bandă de la gazdă la dispozitiv, lățimea de bandă a memoriei și funcționalitatea generală a platformei dvs. personalizate.
- Navigați la directorul /board/ custom_platform_toolkit/tests/boardtest.
- Deschideți boardtest.cl file într-un editor de text și atribuiți o locație tampon fiecărui argument de memorie globală.
De examppe:
__kernel void
mem_stream (__global__attribute__((buffer_location(„DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
Aici, uint *src este alocat memoriei DDR, iar uint *dst este alocat memoriei QDR. board_spec.xml file specifică caracteristicile ambelor sisteme de memorie. - Pentru a utiliza soluția de memorie eterogenă din sistemul dvs. OpenCL, modificați codul gazdă adăugând indicatorul CL_MEM_HETEROGENEOUS_INTELFPGA la apelul dvs. clCreateBuffer.
De examppe:
ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(nesigned) * vectorSize, NULL, &status);
Intel vă recomandă insistent să setați locația buffer-ului ca argument al nucleului înainte de a scrie buffer-ul. Când utilizați o singură memorie globală, puteți scrie bufferele fie înainte, fie după ce le atribuiți unui argument kernel. În sistemele de memorie eterogene, gazda setează locația tamponului înainte de a scrie tamponul. Cu alte cuvinte, gazda va apela funcția clSetKernelArgument înainte de a apela funcția clEnqueueWriteBuffer.
În codul gazdă, invocați apelurile clCreateBuffer, clSetKernelArg și clEnqueueWriteBuffer în următoarea ordine:
ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(nesigned) * vectorSize, NULL, &status);
… status = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
… stare = clEnqueueWriteBuffer(coada, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file prezintă o ordine similară a acestor apeluri de funcții. - După ce modificați boardtest.cl file și codul gazdă, compilați codul gazdă și kernel și verificați funcționalitatea acestora.
Când compilați codul kernel-ului, trebuie să dezactivați intercalarea în rafală a tuturor sistemelor de memorie, incluzând -no-interleaving opțiunea din comanda aoc.
Informații conexe
Dezactivarea intercalării în rafală a memoriei globale (–fără intercalare )
1.5. Verificarea funcționalității memoriei dvs. eterogene Sistem
Pentru a vă asigura că sistemul de memorie eterogen funcționează corect, dezactivați indicatorul CL_CONTEXT_COMPILER_MODE_INTELFPGA din codul gazdă.
În sistemele OpenCL cu memorie omogenă, trebuie să opționați să setați indicatorul CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 în codul gazdă pentru a dezactiva citirea fișierului .aocx file și reprogramarea FPGA. Setarea flag-ului CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 este utilă atunci când instanțiați placa dvs. pentru a verifica funcționalitatea platformei dvs. personalizate fără a proiecta planul de etaj și a specifica regiunile LogicLock™.
Cu sisteme de memorie eterogene, mediul de rulare trebuie să citească locațiile buffer-ului fiecărui buffer, descrise în .aocx file, pentru a verifica funcționalitatea sistemelor de memorie. Cu toate acestea, este posibil să doriți să verificați funcționalitatea platformei dvs. personalizate fără a implementa caracteristicile finale ale designului plăcii, cum ar fi proiectarea planului de etaj și specificarea regiunilor LogicLock.
- Verificați dacă indicatorul CL_CONTEXT_COMPILER_MODE_INTELFPGA este dezactivat în codul dvs. de gazdă.
- Navigați la bord/ directorul /source/host/mmd al platformei dvs. personalizate.
- Deschideți dispozitivul acl_pcie_device.cpp mapat cu memorie (MMD) file într-un editor de text.
- Modificați funcția de reprogramare în acl_pcie_device.cpp file prin adăugarea unui return 0; linie, după cum se arată mai jos:
int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
{
returnează 0;
// presupune eșecul
int reprogram_failed = 1;
// nu presupune rbf sau hash în fpga.bin
int rbf_or_hash_not_provided = 1;
// presupunem că hashurile de bază și de import ale revizuirii nu se potrivesc
int hash_mismatch = 1;
…
} - Recompilați acl_pcie_device.cpp file.
- Verificați dacă indicatorul CL_CONTEXT_COMPILER_MODE_INTELFPGA rămâne nesetat.
Atenţie: După ce adăugați return 0; la funcția de reprogramare și recompilați MMD-ul file, mediul de rulare va citi fișierul .aocx file și alocați locațiile tampon, dar nu va reprograma FPGA. Trebuie să potriviți manual imaginea FPGA cu .aocx file. Pentru a inversa acest comportament, eliminați return 0; din funcția de reprogramare și recompilați MMD-ul file.
1.6. Istoricul revizuirilor documentelor
Data | Versiune | Schimbări |
Dec-17 | 2017.12.01 | • Rebranding CL_MEM_HETEROGENEOUS_ALTERA la CL_MEM_HETEROGENEOUS_INTELFPGA. |
Dec-16 | 2016.12.13 | • Rebranding CL_CONTEXT_COMPILER_MODE_ALTERA la CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Crearea de sisteme de memorie eterogene în Intel® FPGA SDK pentru OpenCL
Platforme personalizate
Trimiteți feedback
Versiunea online
Trimiteți feedback
ID: 683654
Versiune: 2016.12.13
Documente/Resurse
![]() |
intel Crearea sistemelor de memorie eterogene în FPGA SDK pentru platformele personalizate OpenCL [pdfInstrucțiuni Crearea de sisteme de memorie eterogene în FPGA SDK pentru platformele personalizate OpenCL, crearea de sisteme de memorie eterogene, FPGA SDK pentru platformele personalizate OpenCL |