intel - logoVytváranie heterogénnych pamäťových systémov v FPGA SDK pre vlastné platformy OpenCL
Pokyny

Vytváranie heterogénnych pamäťových systémov v súprave Intel® FPGA SDK pre vlastné platformy OpenCL

Implementácia heterogénnej pamäte vo vlastnej platforme umožňuje väčšiu šírku pásma rozhrania externej pamäte (EMIF), ako aj väčší a rýchlejší prístup k pamäti. Kombinácia heterogénneho prístupu k pamäti s optimalizovaným
Kernel OpenCL™(1) môže viesť k výraznému zlepšeniu výkonu vášho systému OpenCL.
Táto aplikačná poznámka poskytuje návod na vytváranie heterogénnych pamäťových systémov na vlastnej platforme na použitie s Intel® FPGA SDK pre OpenCL(2). Intel predpokladá, že ste skúsený dizajnér FPGA, ktorý vyvíja vlastné platformy, ktoré obsahujú heterogénne pamäťové systémy.
Pred vytvorením heterogénnych pamäťových systémov sa oboznámte s Intel FPGA SDK pre dokumenty OpenCL špecifikované nižšie.
Súvisiace informácie

  • Intel FPGA SDK pre OpenCL Programming Guide
  • Intel FPGA SDK for OpenCL Best Practices Guide
  • Sprievodca portovaním referenčnej platformy Intel FPGA SDK pre OpenCL Arria 10 GX FPGA Development Kit

1.1. Overenie funkčnosti dosky FPGA a rozhraní EMIF

Overte každé pamäťové rozhranie nezávisle a potom vytvorte inštanciu vašej vlastnej platformy pomocou globálnej pamäte.

  1. Overte každé pamäťové rozhranie pomocou hardvérových návrhov, ktoré dokážu otestovať rýchlosť a stabilitu každého rozhrania.
  2. Vytvorte inštanciu vlastnej platformy pomocou globálnej pamäte.
    1. Napríkladample, ak máte tri rozhrania DDR, jedno z nich musí byť mapované ako heterogénna pamäť. V tomto prípade overte funkčnosť zásobníka OpenCL s každým rozhraním DDR nezávisle.
      OpenCL a logo OpenCL sú ochranné známky spoločnosti Apple Inc. používané na základe povolenia skupiny Khronos Group™.
    2.  Intel FPGA SDK pre OpenCL je založený na zverejnenej špecifikácii Khronos a prešiel procesom testovania zhody Khronos. Aktuálny stav zhody nájdete na www.khronos.org/conformance.

Intel Corporation. Všetky práva vyhradené. Intel, logo Intel a ďalšie značky Intel sú ochranné známky spoločnosti Intel Corporation alebo jej dcérskych spoločností. Spoločnosť Intel zaručuje výkon svojich FPGA a polovodičových produktov podľa aktuálnych špecifikácií v súlade so štandardnou zárukou spoločnosti Intel, ale vyhradzuje si právo kedykoľvek bez upozornenia zmeniť akékoľvek produkty a služby. Spoločnosť Intel nepreberá žiadnu zodpovednosť ani zodpovednosť vyplývajúcu z aplikácie alebo používania akýchkoľvek informácií, produktov alebo služieb opísaných v tomto dokumente, s výnimkou prípadov, keď to spoločnosť Intel výslovne písomne ​​odsúhlasí. Zákazníkom spoločnosti Intel sa odporúča získať najnovšiu verziu špecifikácií zariadení skôr, ako sa budú spoliehať na akékoľvek zverejnené informácie a pred zadaním objednávky produktov alebo služieb. *Iné názvy a značky môžu byť majetkom iných.
Registrované podľa ISO 9001:2015
Prípadne, ak máte dve rozhrania DDR a jedno rozhranie QDR (quad data rate), overte funkčnosť zásobníka OpenCL dvoch rozhraní DDR a rozhrania QDR nezávisle.
Spoločnosť Intel odporúča, aby ste na testovanie pamäťových rozhraní používali PCI Express® – (PCIe® -) alebo exkluzívne dizajny EMIF. Po overení, či je každé pamäťové rozhranie funkčné a či váš návrh OpenCL funguje s podmnožinou pamäťových rozhraní, pokračujte
vytvoriť plne funkčný heterogénny pamäťový systém. 
1.2. Úprava súboru board_spec.xml File
Upravte súbor board_spec.xml file špecifikovať typy heterogénnych pamäťových systémov, ktoré sú dostupné pre jadrá OpenCL.
Počas kompilácie jadra, Intel FPGA SDK pre OpenCL Offline Compiler priraďuje argumenty jadra pamäti na základe argumentu umiestnenia vyrovnávacej pamäte, ktorý určíte.
1. Prejdite na súbor board_spec.xml file v hardvérovom adresári vašej vlastnej platformy.
2. Otvorte súbor board_spec.xml file v textovom editore a zodpovedajúcim spôsobom upravte XML.
Napríkladampak má váš hardvérový systém dve pamäte DDR ako predvolenú globálnu pamäť a dve banky QDR, ktoré modelujete ako heterogénnu pamäť, upravte časti pamäte v súbore board_spec.xml file podobať sa nasledujúcemu:
















1.3. Nastavenie viacerých rozdeľovačov pamäte v Qsys
V súčasnosti OpenCL Memory Bank Divider v dizajne Qsys nepodporuje non-power-of-2 počet pamäťových bánk, čo nie je obmedzenie pre typické konfigurácie. Existujú však scenáre, v ktorých je potrebný počet pamäťových rozhraní bez spotreby energie 2. Na prispôsobenie počtu pamäťových rozhraní bez výkonu 2 použite viacero rozdeľovačov pamäťových bánk OpenCL na vytvorenie heterogénnych pamäťových systémov s počtom pamäťových bánk bez výkonu 2. Ak máte skutočne heterogénny pamäťový systém, musíte vytvoriť viacero rozdeľovačov pamäťovej banky OpenCL. Predstavte si systém s jedným pamäťovým rozhraním DDR a jedným pamäťovým rozhraním QDR. Pretože tieto dve banky majú rôzne topológie pamäte, nemôžete ich kombinovať do jednej globálnej pamäte.
Obrázok 1. Bloková schéma trojbankového heterogénneho pamäťového systému
Tento heterogénny pamäťový systém obsahuje dve pamäťové rozhrania DDR a jedno pamäťové rozhranie QDR.intel Vytváranie heterogénnych pamäťových systémov v FPGA SDK pre vlastné platformy OpenCL - obr.Ak používate verziu 16.0, 16.0.1 alebo 16.0.2 softvéru Intel Quartus® Prime a Altera SDK pre OpenCL, OpenCL Memory Bank Divider nesprávne spracováva zhluky pamäte cez hranice adries. Ak chcete vyriešiť tento známy problém, pridajte potrubný most s veľkosťou zhluku 1 a pripojte jeho master Avalon ® Memory-Mapped (Avalon-MM) k podriadenému portu OpenCL Memory Bank Divider.
Poznámka:
Tento známy problém je opravený v softvéri Intel Quartus Prime a súprave Intel FPGA SDK pre OpenCL verzie 16.1.
Obrázok 2. Bloková schéma trojbankového heterogénneho pamäťového systému s potrubným mostom intel Vytváranie heterogénnych pamäťových systémov v FPGA SDK pre vlastné platformy OpenCL - obr.1.4. Úprava programu Boardtest a hostiteľského kódu pre vaše riešenie heterogénnej pamäte
Použite jadro boardtest.cl, ktoré sa dodáva so súpravou Intel FPGA SDK for OpenCL Custom Platform Toolkit na testovanie funkčnosti a výkonu vašej vlastnej platformy.
Program boardtest je jadro OpenCL, ktoré vám umožňuje testovať šírku pásma medzi hostiteľmi, šírku pásma pamäte a všeobecnú funkčnosť vašej vlastnej platformy.

  1. Prejdite na /board/ custom_platform_toolkit/tests/boardtest adresár.
  2. Otvorte boardtest.cl file v textovom editore a priraďte umiestnenie vyrovnávacej pamäte každému argumentu globálnej pamäte.
    Napríkladample:
    __kernel neplatné
    mem_stream (__global__attribute__((umiestnenie_bufferu(“DDR”))) uint *src, __global __attribute__((umiestnenie_bufferu(“QDR”))) uint *dst, uint arg, uint arg2)
    Tu je uint *src priradené pamäti DDR a uint *dst je priradené pamäti QDR. Súbor board_spec.xml file špecifikuje vlastnosti oboch pamäťových systémov.
  3. Ak chcete využiť svoje riešenie heterogénnej pamäte vo svojom systéme OpenCL, upravte kód hostiteľa pridaním príznaku CL_MEM_HETEROGENEOUS_INTELFPGA do volania clCreateBuffer.
    Napríkladample:
    ddatain = clCreateBuffer(kontext, CL_MEM_READ_WRITE | memflags
    CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
    Intel dôrazne odporúča, aby ste pred zápisom vyrovnávacej pamäte nastavili umiestnenie vyrovnávacej pamäte ako argument jadra. Pri použití jedinej globálnej pamäte môžete vyrovnávacie pamäte zapisovať pred alebo po ich priradení k argumentu jadra. V heterogénnych pamäťových systémoch hostiteľ nastaví umiestnenie vyrovnávacej pamäte pred zápisom do vyrovnávacej pamäte. Inými slovami, hostiteľ zavolá funkciu clSetKernelArgument pred volaním funkcie clEnqueueWriteBuffer.
    Vo svojom hostiteľskom kóde vyvolajte volania clCreateBuffer, clSetKernelArg a clEnqueueWriteBuffer v nasledujúcom poradí:
    ddatain = clCreateBuffer(kontext, 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(front, ddatatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
    Súbor ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file predstavuje podobné poradie týchto volaní funkcií.
  4.  Po úprave boardtest.cl file a kód hostiteľa, skompilujte kód hostiteľa a jadra a overte ich funkčnosť.
    Pri kompilácii kódu jadra musíte vypnúť burst-interleaving všetkých pamäťových systémov zahrnutím –no-interleaving možnosť v príkaze aoc.

Súvisiace informácie
Vypnutie burst-interleaving globálnej pamäte (-bez prekladania )

1.5. Overenie funkčnosti vašej heterogénnej pamäte Systém
Aby ste sa uistili, že systém heterogénnej pamäte funguje správne, zrušte nastavenie príznaku CL_CONTEXT_COMPILER_MODE_INTELFPGA vo vašom hostiteľskom kóde.
V systémoch OpenCL s homogénnou pamäťou musíte vo svojom hostiteľskom kóde nastaviť príznak CL_CONTEXT_COMPILER_MODE_INTELFPGA=3, aby ste zakázali čítanie súboru .aocx file a preprogramovanie FPGA. Nastavenie príznaku CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 je užitočné pri vytváraní inštancie vašej dosky na overenie funkčnosti vašej vlastnej platformy bez navrhovania pôdorysu a špecifikovania oblastí LogicLock™.
Pri heterogénnych pamäťových systémoch musí runtime prostredie čítať umiestnenie vyrovnávacej pamäte každej vyrovnávacej pamäte, popísané v súbore .aocx filena overenie funkčnosti pamäťových systémov. Možno však budete chcieť overiť funkčnosť vašej vlastnej platformy bez implementácie konečných funkcií návrhu dosky, ako je napríklad návrh pôdorysu a špecifikácia oblastí LogicLock.

  1. Overte, či príznak CL_CONTEXT_COMPILER_MODE_INTELFPGA nie je nastavený vo vašom hostiteľskom kóde.
  2. Prejdite na nástenku/ /source/host/mmd adresára vašej vlastnej platformy.
  3. Otvorte acl_pcie_device.cpp pamäťovo mapované zariadenie (MMD) file v textovom editore.
  4.  Upravte funkciu preprogramovania v súbore acl_pcie_device.cpp file pridaním návratovej hodnoty 0; riadok, ako je uvedené nižšie:
    int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
    {
    návrat 0;
    // predpokladať zlyhanie
    int reprogram_failed = 1;
    // predpokladajme, že v fpga.bin nie je rbf ani hash
    int rbf_or_hash_not_provided = 1;
    // predpokladáme, že základné a importné revízne hodnoty sa nezhodujú
    int hash_mismatch = 1;

    }
  5. Prekompilujte súbor acl_pcie_device.cpp file.
  6. Overte, či príznak CL_CONTEXT_COMPILER_MODE_INTELFPGA zostáva nenastavený.
    Pozor: Po pridaní vráťte 0; na funkciu preprogramovať a znova skompilovať MMD file, runtime prostredie prečíta súbor .aocx file a priradí miesta medzi vyrovnávacími pamäťami, ale nepreprogramuje FPGA. Obrázok FPGA musíte manuálne priradiť k súboru .aocx file. Ak chcete toto správanie zvrátiť, odstráňte návratovú hodnotu 0; z funkcie preprogramovať a znova skompilovať MMD file.

1.6. História revízií dokumentu

Dátum Verzia Zmeny
dec-17 2017.12.01 • Zmena značky CL_MEM_HETEROGENEOUS_ALTERA na CL_MEM_HETEROGENEOUS_INTELFPGA.
dec-16 2016.12.13 • Zmena značky CL_CONTEXT_COMPILER_MODE_ALTERA na CL_CONTEXT_COMPILER_MODE_INTELFPGA.

intel - logoVytváranie heterogénnych pamäťových systémov v Intel® FPGA SDK pre OpenCL
Vlastné platformy
intel Vytváranie heterogénnych pamäťových systémov v FPGA SDK pre vlastné platformy OpenCL - ikona 1 Odoslať spätnú väzbu
intel Vytváranie heterogénnych pamäťových systémov v FPGA SDK pre vlastné platformy OpenCL - ikona Online verzia
intel Vytváranie heterogénnych pamäťových systémov v FPGA SDK pre vlastné platformy OpenCL - ikona 1 Odoslať spätnú väzbu
ID: 683654
Verzia: 2016.12.13

Dokumenty / zdroje

intel Vytváranie heterogénnych pamäťových systémov v FPGA SDK pre vlastné platformy OpenCL [pdfPokyny
Vytváranie heterogénnych pamäťových systémov v FPGA SDK pre vlastné platformy OpenCL, vytváranie heterogénnych pamäťových systémov, FPGA SDK pre vlastné platformy OpenCL

Referencie

Zanechajte komentár

Vaša emailová adresa nebude zverejnená. Povinné polia sú označené *