Heterogén memóriarendszerek létrehozása FPGA SDK-ban OpenCL egyedi platformokhoz
Utasítás
Heterogén memóriarendszerek létrehozása az Intel® FPGA SDK-ban OpenCL egyedi platformokhoz
A heterogén memória egyedi platformon való megvalósítása nagyobb külső memória interfész (EMIF) sávszélességet, valamint nagyobb és gyorsabb memória-hozzáférést tesz lehetővé. A heterogén memóriaelérés és az optimalizált memória kombinációja
Az OpenCL ™(1) kernel jelentős teljesítményjavulást eredményezhet az OpenCL rendszerben.
Ez az alkalmazási megjegyzés útmutatást ad heterogén memóriarendszerek létrehozásához egyéni platformon az Intel® FPGA SDK for OpenCL-hez(2) való használatra. Az Intel feltételezi, hogy Ön tapasztalt FPGA-tervező, aki heterogén memóriarendszereket tartalmazó egyedi platformokat fejleszt.
A heterogén memóriarendszerek létrehozása előtt ismerkedjen meg az alábbiakban ismertetett Intel FPGA SDK for OpenCL dokumentumokkal.
Kapcsolódó információk
- Intel FPGA SDK az OpenCL programozási útmutatóhoz
- Intel FPGA SDK for OpenCL legjobb gyakorlatok útmutatója
- Intel FPGA SDK OpenCL Arria 10 GX FPGA fejlesztői készlet referenciaplatform-portolási útmutatójához
1.1. Az FPGA tábla és az EMIF interfészek működőképességének ellenőrzése
Ellenőrizze az egyes memóriainterfészek egymástól függetlenül, majd példányosítsa egyedi platformját a globális memória használatával.
- Ellenőrizze az egyes memóriainterfészek olyan hardverkonstrukciók segítségével, amelyek tesztelhetik az egyes interfészek sebességét és stabilitását.
- Példányosítsa egyéni platformját a globális memória használatával.
- Plample, ha három DDR interfésszel rendelkezik, akkor az egyiket heterogén memóriának kell leképezni. Ebben az esetben ellenőrizze az OpenCL-verem működőképességét az egyes DDR-interfészekkel függetlenül.
Az OpenCL és az OpenCL logó az Apple Inc. védjegyei, amelyeket a Khronos Group™ engedélyével használnak. - Az Intel FPGA SDK for OpenCL egy közzétett Khronos specifikáción alapul, és átment a Khronos megfelelőségi tesztelési folyamaton. A jelenlegi megfelelőségi állapot a címen található www.khronos.org/conformance.
- Plample, ha három DDR interfésszel rendelkezik, akkor az egyiket heterogén memóriának kell leképezni. Ebben az esetben ellenőrizze az OpenCL-verem működőképességét az egyes DDR-interfészekkel függetlenül.
Intel Corporation. Minden jog fenntartva. Az Intel, az Intel logó és más Intel védjegyek az Intel Corporation vagy leányvállalatai védjegyei. Az Intel szavatolja FPGA és félvezető termékeinek aktuális specifikációi szerinti teljesítményét, az Intel szabványos garanciájával összhangban, de fenntartja a jogot, hogy bármely terméket és szolgáltatást előzetes értesítés nélkül módosítson. Az Intel nem vállal felelősséget az itt leírt információk, termékek vagy szolgáltatások alkalmazásából vagy használatából eredően, kivéve, ha az Intel kifejezetten írásban beleegyezik. Az Intel ügyfeleinek azt tanácsoljuk, hogy szerezzék be az eszközspecifikációk legfrissebb verzióját, mielőtt bármilyen közzétett információra hagyatkoznának, és mielőtt megrendelnék termékeket vagy szolgáltatásokat. *Más nevek és márkák mások tulajdonát képezhetik.
ISO 9001: 2015 bejegyezve
Alternatív megoldásként, ha két DDR interfésszel és egy négyes adatsebességű (QDR) interfésszel rendelkezik, ellenőrizze a két DDR interfész és a QDR interfész OpenCL veremének működőképességét egymástól függetlenül.
Az Intel azt javasolja, hogy PCI Express® (PCIe® -) vagy EMIF-exkluzív kialakításokat használjon a memória interfészek teszteléséhez. Miután meggyőződött arról, hogy minden memóriainterfész működőképes, és hogy az OpenCL-terv működik a memória interfészek egy részével, folytassa
teljesen működőképes heterogén memóriarendszer létrehozására.
1.2. A board_spec.xml módosítása File
Módosítsa a board_spec.xml fájlt file az OpenCL kernelek számára elérhető heterogén memóriarendszerek típusainak megadásához.
A kernelfordítás során az Intel FPGA SDK for OpenCL Offline Compiler rendszermag-argumentumokat rendel a memóriához a megadott pufferhely argumentum alapján.
1. Keresse meg a board_spec.xml fájlt file az egyéni platform hardverkönyvtárában.
2. Nyissa meg a board_spec.xml fájlt file szövegszerkesztőben, és ennek megfelelően módosítsa az XML-t.
Plample, ha a hardverrendszer két DDR-memóriával rendelkezik alapértelmezett globálismemóriaként és két QDR-bankkal, amelyeket heterogén memóriaként modellez, módosítsa a board_spec.xml memóriarészeit file hasonlítani a következőkre:
1.3. Több memóriaelosztó beállítása a Qsys-ben
Jelenleg az OpenCL memóriabank-osztó a Qsys-ben nem támogatja a nem 2-es számú memóriabankot, ami nem korlátozza a tipikus konfigurációkat. Vannak azonban olyan forgatókönyvek, amikor nem 2-es számú memóriainterfészre van szükség. A nem 2-es számú memóriainterfész befogadásához használjon több OpenCL memóriabank-osztót, hogy heterogén memóriarendszereket hozzon létre nem 2-es számú memóriabankkal. Ha valódi heterogén memóriarendszerrel rendelkezik, több OpenCL memóriabank-osztót kell létrehoznia. Vegyünk egy rendszert egy DDR memória interfésszel és egy QDR memória interfésszel. Mivel a két bank különböző memória topológiával rendelkezik, nem egyesítheti őket egyetlen globális memória alatt.
1. ábra: Hárombankos heterogén memóriarendszer blokkdiagramja
Ez a heterogén memóriarendszer két DDR memória interfészt és egy QDR memória interfészt tartalmaz.Ha az Intel Quartus® Prime szoftver 16.0-s, 16.0.1-es vagy 16.0.2-es verzióját és az Altera SDK for OpenCL-t használja, az OpenCL Memory Bank Divider helytelenül kezeli a címhatárokon átnyúló memóriasorozatokat. Az ismert probléma megkerüléséhez adjon hozzá egy csővezeték hidat 1-es sorozatmérettel, és csatlakoztassa Avalon ®Memory-Mapped (Avalon-MM) mesterét az OpenCL memóriabank-osztó szolga portjához.
Jegyzet:
Ezt az ismert problémát az Intel Quartus Prime szoftver és az Intel FPGA SDK az OpenCL 16.1-es verziójához javítja.
2. ábra: Három bankból álló heterogén memóriarendszer blokkdiagramja csővezetékhíddal 1.4. A Boardtest program és a gazdagép kód módosítása a heterogén memóriamegoldáshoz
Használja az Intel FPGA SDK for OpenCL Custom Platform Toolkit boardtest.cl kernelt az egyéni platform funkcionalitásának és teljesítményének tesztelésére.
A boardtest program egy OpenCL kernel, amely lehetővé teszi a gazdagép és az eszköz közötti sávszélesség, a memória sávszélesség és az egyéni platform általános működésének tesztelését.
- Böngésszen a /board/ custom_platform_toolkit/tests/boardtest könyvtár.
- Nyissa meg a boardtest.cl-t file egy szövegszerkesztőben, és rendeljen pufferhelyet minden globális memória argumentumhoz.
Plample:
__kernel érvénytelen
mem_stream (__global__attribute__((puffer_location("DDR"))) uint *src, __global __attribute__((puffer_location("QDR"))) uint *dst, uint arg, uint arg2)
Itt az uint *src a DDR memóriához, az uint *dst pedig a QDR memóriához van hozzárendelve. A board_spec.xml file mindkét memóriarendszer jellemzőit határozza meg. - A heterogén memóriamegoldás kihasználásához az OpenCL rendszerben módosítsa a gazdagép kódját a CL_MEM_HETEROGENEOUS_INTELFPGA jelző hozzáadásával a clCreateBuffer híváshoz.
Plample:
ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(unsigned) * vectorSize, NULL, &status);
Az Intel erősen javasolja, hogy a puffer megírása előtt állítsa be a puffer helyét kernel argumentumként. Egyetlen globális memória használatakor a puffereket a kernel argumentumhoz való hozzárendelésük előtt vagy után írhatja. Heterogén memóriarendszerekben a gazdagép beállítja a puffer helyét a puffer írása előtt. Más szavakkal, a gazdagép a clSetKernelArgument függvényt a clEnqueueWriteBuffer függvény meghívása előtt hívja meg.
A gazdagép kódjában hívja meg a clCreateBuffer, clSetKernelArg és clEnqueueWriteBuffer hívásokat a következő sorrendben:
ddatain = clCreateBuffer(context, 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);
Az ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file a függvényhívások hasonló sorrendjét mutatja be. - Miután módosította a boardtest.cl file és a gazdagép kódot, fordítsa le a gazdagép- és kernelkódot, és ellenőrizze azok működését.
A rendszermag kódjának fordításakor le kell tiltania az összes memóriarendszer burst-interleavingjét a –no-interleaving használatával. opciót az aoc parancsban.
Kapcsolódó információk
A globális memória sorozatos összeillesztésének letiltása (–no-interleaving )
1.5. Heterogén memóriája működőképességének ellenőrzése Rendszer
A heterogén memóriarendszer megfelelő működésének biztosításához kapcsolja ki a CL_CONTEXT_COMPILER_MODE_INTELFPGA jelzőt a gazdagép kódjában.
A homogén memóriával rendelkező OpenCL rendszerekben be kell állítania a CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 jelzőt a gazdagép kódjában az .aocx olvasásának letiltásához. file és az FPGA újraprogramozása. A CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 jelző beállítása akkor hasznos, ha példányosítja a táblát az egyéni platform működőképességének ellenőrzéséhez anélkül, hogy megtervezné az alaprajzot és megadná a LogicLock™ régiókat.
Heterogén memóriarendszerek esetén a futási környezetnek be kell olvasnia az egyes pufferek pufferhelyeit, az .aocx-ben leírtak szerint. file, hogy ellenőrizze a memóriarendszerek működőképességét. Előfordulhat azonban, hogy ellenőrizni szeretné az egyéni platform működését anélkül, hogy végrehajtaná a tábla tervezésének végső jellemzőit, például az alaprajzot és a LogicLock régiók megadását.
- Ellenőrizze, hogy a CL_CONTEXT_COMPILER_MODE_INTELFPGA jelző nincs-e beállítva a gazdagép kódjában.
- Tallózás a táblához/ Az egyéni platform /source/host/mmd könyvtárában.
- Nyissa meg az acl_pcie_device.cpp memória-leképezett eszközt (MMD) file szövegszerkesztőben.
- Módosítsa az újraprogramozási függvényt az acl_pcie_device.cpp fájlban file 0 visszatérés hozzáadásával; sor, az alábbiak szerint:
int ACL_PCIE_DEVICE::reprogram(void *data, size_t data_size)
{
visszatérés 0;
// sikertelenséget feltételez
int reprogram_sikertelen = 1;
// feltételezzük, hogy nincs rbf vagy hash az fpga.bin fájlban
int rbf_or_hash_not_provided = 1;
// tételezzük fel, hogy az alap- és az importverzió-kivonat nem egyezik
int hash_mismatch = 1;
…
} - Fordítsa újra az acl_pcie_device.cpp fájlt file.
- Győződjön meg arról, hogy a CL_CONTEXT_COMPILER_MODE_INTELFPGA jelző nincs beállítva.
Figyelem: Miután hozzáadta a return 0 értéket; az újraprogramozás funkcióhoz, és fordítsa újra az MMD-t file, a futási környezet beolvassa az .aocx fájlt file és hozzárendeli a pufferhelyeket, de nem programozza át az FPGA-t. Manuálisan kell egyeztetnie az FPGA-képet az .aocx fájllal file. A viselkedés visszafordításához távolítsa el a return 0 értéket; az újraprogramozás funkcióból, és fordítsa újra az MMD-t file.
1.6. Dokumentum felülvizsgálati előzmények
Dátum | Változat | Változások |
december-17 | 2017.12.01 | • Új márkanév: CL_MEM_HETEROGENEOUS_ALTERA, CL_MEM_HETEROGENEOUS_INTELFPGA. |
december-16 | 2016.12.13 | • Új márkanév: CL_CONTEXT_COMPILER_MODE_ALTERA, CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Heterogén memóriarendszerek létrehozása az Intel® FPGA SDK-ban OpenCL-hez
Egyéni platformok
Visszajelzés küldése
Online verzió
Visszajelzés küldése
ID: 683654
Verzió: 2016.12.13
Dokumentumok / Források
![]() |
intel Heterogén memóriarendszerek létrehozása FPGA SDK-ban OpenCL egyéni platformokhoz [pdfUtasítások Heterogén memóriarendszerek létrehozása FPGA SDK-ban OpenCL egyedi platformokhoz, Heterogén memóriarendszerek létrehozása, FPGA SDK OpenCL egyéni platformokhoz |