Kreante Heterogeneajn Memorsistemojn en FPGA SDK por OpenCL Propraj Platformoj
Instrukcioj
Kreante Heterogeneajn Memorsistemojn en Intel® FPGA SDK por OpenCL Propraj Platformoj
La efektivigo de heterogena memoro en Propra Platformo permesas pli da ekstera memorinterfaco (EMIF) bendolarĝo same kiel pli grandajn kaj pli rapidajn memoralirojn. La kombinaĵo de heterogena memoraliro kun optimumigita
OpenCL ™(1)kerno povas rezultigi signifajn rendimentajn plibonigojn por via OpenCL-sistemo.
Ĉi tiu aplika noto provizas gvidon pri kreado de heterogenaj memorsistemoj en Propra Platformo por uzo kun la Intel® FPGA SDK por OpenCL(2). Intel supozas, ke vi estas sperta FPGA-dezajnisto, kiu disvolvas Proprajn Platformojn, kiuj enhavas heterogenajn memorsistemojn.
Antaŭ krei la heterogenajn memorsistemojn, familiariĝu kun la Intel FPGA SDK por OpenCL-dokumentoj specifitaj sube.
Rilataj Informoj
- Intel FPGA SDK por OpenCL Programming Guide
- Intel FPGA SDK por OpenCL Best Practices Guide
- Intel FPGA SDK por OpenCL Arria 10 GX FPGA Development Kit Reference Platform Porting Guide
1.1. Kontrolante la Funkcion de la FPGA-Estraro kaj la EMIF-Interfacoj
Kontrolu ĉiun memorinterfacon sendepende kaj poste kreu vian Propran Platformon per tutmonda memoro.
- Kontrolu ĉiun memorinterfacon per aparataj dezajnoj, kiuj povas testi la rapidecon kaj stabilecon de ĉiu interfaco.
- Instancigu vian Propran Platformon uzante tutmondan memoron.
- Por ekzample, se vi havas tri DDR-interfacojn, unu el ili devas esti mapita kiel heterogena memoro. En ĉi tiu kazo, kontrolu la funkciecon de la OpenCL-stako kun ĉiu DDR-interfaco sendepende.
OpenCL kaj la emblemo de OpenCL estas varmarkoj de Apple Inc. uzataj laŭ permeso de Khronos Group™. - La Intel FPGA SDK por OpenCL baziĝas sur publikigita Khronos Specification, kaj trapasis la Khronos Conformance Testing Process. Nuna konforma stato troveblas ĉe www.khronos.org/conformance.
- Por ekzample, se vi havas tri DDR-interfacojn, unu el ili devas esti mapita kiel heterogena memoro. En ĉi tiu kazo, kontrolu la funkciecon de la OpenCL-stako kun ĉiu DDR-interfaco sendepende.
Intel Corporation. Ĉiuj rajtoj rezervitaj. Intel, la Intel-emblemo kaj aliaj Intel-markoj estas varmarkoj de Intel Corporation aŭ ĝiaj filioj. Intel garantias agadon de siaj FPGA kaj duonkonduktaĵoj laŭ nunaj specifoj konforme al la norma garantio de Intel, sed rezervas la rajton fari ŝanĝojn al ajnaj produktoj kaj servoj iam ajn sen avizo. Intel supozas neniun respondecon aŭ respondecon de la apliko aŭ uzo de ajna informo, produkto aŭ servo priskribita ĉi tie krom kiel eksplicite konsentite skribe de Intel. Intel-klientoj estas konsilitaj akiri la lastan version de aparato-specifoj antaŭ ol fidi je ajnaj publikigitaj informoj kaj antaŭ ol fari mendojn por produktoj aŭ servoj. *Aliaj nomoj kaj markoj povas esti postulataj kiel posedaĵo de aliaj.
ISO 9001:2015 Registrita
Alternative, se vi havas du interfacojn DDR kaj unu interfacon de kvara datumrapideco (QDR), kontrolu la funkciecon de la OpenCL-stako de la du interfacoj de DDR kaj la interfaco de QDR sendepende.
Intel rekomendas, ke vi uzu PCI Express® - (PCIe® -) aŭ ekskluzivajn dezajnojn de EMIF por testi viajn memorinterfacojn. Post kiam vi kontrolas, ke ĉiu memorinterfaco funkcias kaj ke via OpenCL-dezajno funkcias kun subaro de la memorinterfacoj, daŭrigu.
krei tute funkcian heterogenan memorsistemon.
1.2. Modifante la board_spec.xml File
Modifi la board_spec.xml file por specifi la specojn de heterogenaj memorsistemoj kiuj estas haveblaj al la OpenCL-kernoj.
Dum kernkompilo, la Intel FPGA SDK por OpenCL Offline Compiler asignas kernargumentojn al memoro bazita sur la bufroloka argumento kiun vi specifas.
1. Foliumi al la board_spec.xml file en la aparatara dosierujo de via Propra Platformo.
2. Malfermu la board_spec.xml file en tekstredaktilo kaj modifi la XML laŭe.
Por ekzample, se via aparatara sistemo havas du DDR-memorojn kiel defaŭltan tutmondan memoron kaj du QDR-bankojn, kiujn vi modeligas kiel heterogena memoro, modifi la memorsekciojn de la board_spec.xml file por simili la sekvantan:
1.3. Agordi Multoblajn Memordividilojn en Qsys
Nuntempe, la OpenCL Memory Bank Divider en la Qsys-dezajno ne subtenas ne-potencan-de-2 nombron da memorbankoj, kio ne estas limigo por tipaj agordoj. Tamen, ekzistas scenaroj kie ne-potenco-de-2 nombro da memorinterfacoj estas necesaj. Por akomodi ne-potenco-de-2 nombron da memorinterfacoj, uzu plurajn OpenCL Memory Bank Dividers por krei heterogenajn memorsistemojn kun ne-potenco-de-2 nombro da memorbankoj. Vi devas krei plurajn OpenCL Memory Bank Dividers kiam vi havas veran heterogenan memorsistemon. Konsideru sistemon kun unu DDR-memorinterfaco kaj unu QDR-memorinterfaco. Ĉar la du bankoj havas malsamajn memortopologiojn, vi ne povas kombini ilin sub ununura tutmonda memoro.
Figuro 1. Blokdiagramo de Tri-Banka Heterogenea Memorsistemo
Ĉi tiu heterogena memorsistemo enhavas du DDR-memorinterfacojn kaj unu QDR-memorinterfacon.Se vi uzas version 16.0, 16.0.1 aŭ 16.0.2 de la programaro Intel Quartus® Prime kaj la Altera SDK por OpenCL, la OpenCL Memory Bank Divider malĝuste pritraktas memoreksplodojn trans adreslimoj. Por trakti ĉi tiun konatan problemon, aldonu duktoponton kun kreva grandeco de 1 kaj konektu ĝian Avalon ®Memory-Mapped (Avalon-MM) majstron al la sklava haveno de la OpenCL Memory Bank Divider.
Notu:
Ĉi tiu konata problemo estas riparita en la programaro Intel Quartus Prime kaj la Intel FPGA SDK por OpenCL versio 16.1.
Figuro 2. Blokdiagramo de Tri-Banka Heterogenea Memorsistemo kun Dukto-Ponto 1.4. Modifante la Boardtest-Programon kaj la Gastigantan Kodon por Via Heterogena Memora Solvo
Uzu la boardtest.cl-kernon kiu venas kun la Intel FPGA SDK por OpenCL Propra Platformo Toolkit por testi la funkciojn kaj rendimenton de via Propra Platformo.
La boardtest-programo estas OpenCL-kerno, kiu ebligas al vi testi bendolarĝon de gastiganto al aparato, memora bendolarĝo kaj ĝeneralan funkciojn de via Propra Platformo.
- Foliumi al la /board/ custom_platform_toolkit/tests/boardtest-dosierujo.
- Malfermu la boardtest.cl file en tekstredaktilo kaj asignu bufran lokon al ĉiu tutmonda memorargumento.
Por ekzample:
__kerno malplena
mem_stream (__global__attribute__((buffer_location ("DDR"))) uint *src, __global __attribute__((buffer_location ("QDR"))) uint *dst, uint arg, uint arg2)
Ĉi tie, uint *src estas asignita al DDR-memoro, kaj uint *dst estas asignita al QDR-memoro. La board_spec.xml file precizigas la karakterizaĵojn de ambaŭ memorsistemoj. - Por utiligi vian heterogenan memorsolvon en via OpenCL-sistemo, modifi vian gastigan kodon aldonante la flagon CL_MEM_HETEROGENEOUS_INTELFPGA al via clCreateBuffer-voko.
Por ekzample:
ddatain = clCreateBuffer (kunteksto, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(sensignita) * vectorSize, NULL, &status);
Intel forte rekomendas, ke vi agordu la bufrolokon kiel kernan argumenton antaŭ ol skribi la bufron. Kiam vi uzas ununuran tutmondan memoron, vi povas skribi la bufrojn aŭ antaŭ aŭ post atribui ilin al kerna argumento. En heterogenaj memorsistemoj, la gastiganto metas la bufrolokon antaŭ skribi la bufron. Alivorte, la gastiganto nomos la funkcion clSetKernelArgument antaŭ ol vokos la funkcion clEnqueueWriteBuffer.
En via gastiga kodo, alvoku la clCreateBuffer, clSetKernelArg kaj clEnqueueWriteBuffer-vokojn en la sekva ordo:
ddatain = clCreateBuffer (kunteksto, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(sensignita) * vectorSize, NULL, &status);
… statuso = clSetKernelArg(kerno[k], 0, sizeof(cl_mem), (void*)&ddatain);
… statuso = clEnqueueWriteBuffer (vico, ddatuno, CL_FALSE, 0, grandeco de (sensigna) * vectorSize, hdatuno, 0, NULL, NULL);
La ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file prezentas similan ordon de ĉi tiuj funkciovokoj. - Post kiam vi modifas la boardtest.cl file kaj la gastiga kodo, kompilu la gastigantan kaj kernan kodon kaj kontroli ilian funkciecon.
Kiam vi kompilas vian kernan kodon, vi devas malebligi burst-interleading de ĉiuj memorsistemoj inkluzivante la -no-interleaving opcio en la komando aoc.
Rilataj Informoj
Malebligado de Burst-Interleaving de Tutmonda Memoro (–seninterpleving )
1.5. Kontrolante la Funkcion de Via Heterogena Memoro Sistemo
Por certigi, ke la heterogena memorsistemo funkcias ĝuste, malŝaltu la flagon CL_CONTEXT_COMPILER_MODE_INTELFPGA en via gastiga kodo.
En OpenCL-sistemoj kun homogena memoro, vi devas elekti la flagon CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 en via gastiga kodo por malebligi la legadon de la .aocx. file kaj la reprogramado de la FPGA. Agordi la flagon CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 estas utila kiam oni kreas vian tabulon por kontroli la funkciecon de via Propra Platformo sen desegni la plankoplanon kaj specifi la regionojn de LogicLock™.
Kun heterogenaj memorsistemoj, la rultempa medio devas legi la bufrolokojn de ĉiu bufro, priskribitaj en la .aocx file, por kontroli la funkciecon de la memorsistemoj. Tamen, vi eble volas kontroli la funkciecon de via Propra Platformo sen efektivigi la finajn funkciojn de la tabulo-dezajno, kiel desegni la etaĝplanon kaj specifi la regionojn de LogicLock.
- Kontrolu, ke la flago CL_CONTEXT_COMPILER_MODE_INTELFPGA estas malmetita en via gastiga kodo.
- Foliumi al la tabulo/ /source/host/mmd dosierujo de via Propra Platformo.
- Malfermu la acl_pcie_device.cpp memor-mapitan aparaton (MMD) file en tekstredaktilo.
- Modifi la reprogramfunkcion en la acl_pcie_device.cpp file aldonante revenon 0; linio, kiel montrite malsupre:
int ACL_PCIE_DEVICE::reprogram(void *datenoj, size_t data_size)
{
reveni 0;
// supozas fiaskon
int reprogram_failed = 1;
// supozas neniun rbf aŭ hash en fpga.bin
int rbf_or_hash_not_provided = 1;
// supozas ke bazaj kaj importaj reviziaj haŝoj ne kongruas
int hash_mismatch = 1;
…
} - Rekompilu la acl_pcie_device.cpp file.
- Kontrolu, ke la flago CL_CONTEXT_COMPILER_MODE_INTELFPGA restas nemetita.
Atentu: Post kiam vi aldonas revenon 0; al la reprogramfunkcio kaj rekompilu la MMD file, la rultempa medio legos la .aocx file kaj asignas la bufrolokojn sed ne reprogramos la FPGA. Vi devas mane kongrui la FPGA-bildon kun la .aocx file. Por inversigi ĉi tiun konduton, forigu revenon 0; de la reprogramfunkcio kaj rekompilu la MMD file.
1.6. Dokumenta Revizia Historio
Dato | Versio | Ŝanĝoj |
Dec-17 | 2017.12.01 | • Remarkita CL_MEM_HETEROGENEOUS_ALTERA al CL_MEM_HETEROGENEOUS_INTELFPGA. |
Dec-16 | 2016.12.13 | • Remarkita CL_CONTEXT_COMPILER_MODE_ALTERA al CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Kreante Heterogeneajn Memorsistemojn en Intel® FPGA SDK por OpenCL
Propraj Platformoj
Sendu Rimarkojn
Enreta versio
Sendu Rimarkojn
ID: 683654
Versio: 2016.12.13
Dokumentoj/Rimedoj
![]() |
intel Kreado de Heterogeneous Memory Systems en FPGA SDK por OpenCL Propraj Platformoj [pdf] Instrukcioj Kreante Heterogeneajn Memorsistemojn en FPGA SDK por OpenCL Propraj Platformoj, Kreante Heterogeneajn Memorsistemojn, FPGA SDK por OpenCL Propraj Platformoj |