Creació de sistemes de memòria heterogènia en FPGA SDK per a plataformes personalitzades OpenCL
Instruccions
Creació de sistemes de memòria heterogènia en Intel® FPGA SDK per a plataformes personalitzades OpenCL
La implementació de memòria heterogènia en una plataforma personalitzada permet més amplada de banda de la interfície de memòria externa (EMIF), així com accessos de memòria més grans i ràpids. La combinació d'accés a memòria heterogènia amb una memòria optimitzada
El nucli OpenCL ™(1) pot donar lloc a millores significatives del rendiment del vostre sistema OpenCL.
Aquesta nota d'aplicació ofereix orientació sobre la creació de sistemes de memòria heterogenis en una plataforma personalitzada per utilitzar-los amb l'SDK Intel® FPGA per a OpenCL(2). Intel assumeix que sou un dissenyador de FPGA experimentat que està desenvolupant plataformes personalitzades que contenen sistemes de memòria heterogenis.
Abans de crear els sistemes de memòria heterogenis, familiaritzeu-vos amb l'SDK Intel FPGA per als documents OpenCL especificats a continuació.
Informació relacionada
- Intel FPGA SDK per a la guia de programació OpenCL
- Intel FPGA SDK per a OpenCL Guia de bones pràctiques
- Intel FPGA SDK per a OpenCL Arria 10 GX FPGA Development Kit Reference Platform Porting Guide
1.1. Verificació de la funcionalitat de la placa FPGA i les interfícies EMIF
Verifiqueu cada interfície de memòria de manera independent i, a continuació, instància la vostra plataforma personalitzada utilitzant la memòria global.
- Verifiqueu cada interfície de memòria mitjançant dissenys de maquinari que puguin provar la velocitat i l'estabilitat de cada interfície.
- Crea una instancia de la teva plataforma personalitzada mitjançant la memòria global.
- Per exampsi teniu tres interfícies DDR, una d'elles s'ha de mapejar com a memòria heterogènia. En aquest cas, verifiqueu la funcionalitat de la pila OpenCL amb cada interfície DDR de manera independent.
OpenCL i el logotip d'OpenCL són marques comercials d'Apple Inc. utilitzades amb permís de Khronos Group™. - L'SDK Intel FPGA per a OpenCL es basa en una especificació de Khronos publicada i ha superat el procés de prova de conformitat de Khronos. L'estat de conformitat actual es pot trobar a www.khronos.org/conformance.
- Per exampsi teniu tres interfícies DDR, una d'elles s'ha de mapejar com a memòria heterogènia. En aquest cas, verifiqueu la funcionalitat de la pila OpenCL amb cada interfície DDR de manera independent.
Intel Corporation. Tots els drets reservats. Intel, el logotip d'Intel i altres marques d'Intel són marques comercials d'Intel Corporation o de les seves filials. Intel garanteix el rendiment dels seus productes FPGA i semiconductors amb les especificacions actuals d'acord amb la garantia estàndard d'Intel, però es reserva el dret de fer canvis a qualsevol producte i servei en qualsevol moment sense previ avís. Intel no assumeix cap responsabilitat derivada de l'aplicació o l'ús de qualsevol informació, producte o servei descrit aquí, tret que Intel ho acordi expressament per escrit. Es recomana als clients d'Intel que obtinguin la darrera versió de les especificacions del dispositiu abans de confiar en qualsevol informació publicada i abans de fer comandes de productes o serveis. * Altres noms i marques es poden reclamar com a propietat d'altres.
Registre ISO 9001:2015
Alternativament, si teniu dues interfícies DDR i una interfície de velocitat de dades quàdruple (QDR), verifiqueu la funcionalitat de la pila OpenCL de les dues interfícies DDR i la interfície QDR de manera independent.
Intel recomana que utilitzeu dissenys PCI Express® - (PCIe® -) o exclusius d'EMIF per provar les vostres interfícies de memòria. Després de verificar que cada interfície de memòria és funcional i que el vostre disseny d'OpenCL funciona amb un subconjunt d'interfícies de memòria, continueu
per crear un sistema de memòria heterogeni totalment funcional.
1.2. S'està modificant el fitxer board_spec.xml File
Modifiqueu el fitxer board_spec.xml file per especificar els tipus de sistemes de memòria heterogenis que estan disponibles per als nuclis OpenCL.
Durant la compilació del nucli, l'Intel FPGA SDK for OpenCL Offline Compiler assigna arguments del nucli a una memòria en funció de l'argument de la ubicació del buffer que especifiqueu.
1. Navegueu al fitxer board_spec.xml file al directori de maquinari de la vostra plataforma personalitzada.
2. Obriu el fitxer board_spec.xml file en un editor de text i modifiqueu l'XML en conseqüència.
Per exampsi el vostre sistema de maquinari té dues memòries DDR com a memòria global predeterminada i dos bancs QDR que modeleu com a memòria heterogènia, modifiqueu les seccions de memòria del fitxer board_spec.xml file assemblar-se al següent:
1.3. Configuració de diversos divisors de memòria a Qsys
Actualment, el divisor de bancs de memòria OpenCL del disseny Qsys no admet un nombre de bancs de memòria que no són de potència de 2, cosa que no és una limitació per a les configuracions típiques. Tanmateix, hi ha escenaris en què calen interfícies de memòria que no siguin de potència de 2. Per adaptar-se a un nombre d'interfícies de memòria que no són de potència de 2, utilitzeu diversos divisors de bancs de memòria OpenCL per crear sistemes de memòria heterogenis amb un nombre de bancs de memòria que no siguin de potència de 2. Heu de crear diversos divisors de bancs de memòria OpenCL quan teniu un veritable sistema de memòria heterogeni. Penseu en un sistema amb una interfície de memòria DDR i una interfície de memòria QDR. Com que els dos bancs tenen topologies de memòria diferents, no podeu combinar-los en una sola memòria global.
Figura 1. Diagrama de blocs d'un sistema de memòria heterogènia de tres bancs
Aquest sistema de memòria heterogeni conté dues interfícies de memòria DDR i una interfície de memòria QDR.Si utilitzeu la versió 16.0, 16.0.1 o 16.0.2 del programari Intel Quartus® Prime i l'Altera SDK per a OpenCL, l'OpenCL Memory Bank Divider gestiona incorrectament les ràfegues de memòria entre els límits d'adreces. Per solucionar aquest problema conegut, afegiu un pont de canalització amb una mida de ràfega d'1 i connecteu el seu mestre Avalon ®Memory-Mapped (Avalon-MM) al port esclau de l'OpenCL Memory Bank Divider.
Nota:
Aquest problema conegut s'ha solucionat al programari Intel Quartus Prime i a l'SDK Intel FPGA per a OpenCL versió 16.1.
Figura 2. Diagrama de blocs d'un sistema de memòria heterogènia de tres bancs amb un pont de canalització 1.4. Modificació del programa Boardtest i el codi d'amfitrió per a la vostra solució de memòria heterogènia
Utilitzeu el nucli boardtest.cl que ve amb l'SDK d'Intel FPGA per a OpenCL Custom Platform Toolkit per provar la funcionalitat i el rendiment de la vostra plataforma personalitzada.
El programa boardtest és un nucli OpenCL que us permet provar l'amplada de banda d'amfitrió a dispositiu, l'amplada de banda de memòria i la funcionalitat general de la vostra plataforma personalitzada.
- Navega fins a Directori /board/ custom_platform_toolkit/tests/boardtest.
- Obriu el boardtest.cl file en un editor de text i assigneu una ubicació de memòria intermèdia a cada argument de memòria global.
Per exampLI:
__kernel buit
mem_stream (__global__attribute__((buffer_location(“DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
Aquí, uint *src s'assigna a la memòria DDR i uint *dst s'assigna a la memòria QDR. El fitxer board_spec.xml file especifica les característiques dels dos sistemes de memòria. - Per aprofitar la vostra solució de memòria heterogènia al vostre sistema OpenCL, modifiqueu el vostre codi d'amfitrió afegint el senyalador CL_MEM_HETEROGENEOUS_INTELFPGA a la vostra trucada clCreateBuffer.
Per exampLI:
ddatain = clCreateBuffer (context, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(sense signar) * vectorSize, NULL, &status);
Intel recomana fermament que establiu la ubicació de la memòria intermèdia com a argument del nucli abans d'escriure la memòria intermèdia. Quan utilitzeu una única memòria global, podeu escriure els buffers abans o després d'assignar-los a un argument del nucli. En sistemes de memòria heterogenis, l'amfitrió estableix la ubicació de la memòria intermèdia abans d'escriure la memòria intermèdia. En altres paraules, l'amfitrió cridarà a la funció clSetKernelArgument abans de cridar a la funció clEnqueueWriteBuffer.
Al codi d'amfitrió, invoqueu les trucades clCreateBuffer, clSetKernelArg i clEnqueueWriteBuffer en l'ordre següent:
ddatain = clCreateBuffer(context, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof(sense signar) * vectorSize, NULL, &status);
… estat = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
… estat = clEnqueueWriteBuffer(cua, ddatain, CL_FALSE, 0, sizeof(sense signar) * vectorSize,hdatain, 0, NULL, NULL);
L'ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file presenta un ordre similar d'aquestes crides de funció. - Després de modificar el boardtest.cl file i el codi amfitrió, compileu el codi amfitrió i del nucli i comproveu-ne la funcionalitat.
Quan compileu el vostre codi del nucli, heu de desactivar l'entrellaçat en ràfega de tots els sistemes de memòria inclòs el -no-interleaving opció a l'ordre aoc.
Informació relacionada
Desactivació de l'entrellaçat en ràfega de la memòria global (–no-interleaving )
1.5. Verificació de la funcionalitat de la vostra memòria heterogènia Sistema
Per assegurar-vos que el sistema de memòria heterogeni funciona correctament, desactiveu la marca CL_CONTEXT_COMPILER_MODE_INTELFPGA del vostre codi d'amfitrió.
En sistemes OpenCL amb memòria homogènia, heu d'optar per establir la marca CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 al vostre codi d'amfitrió per desactivar la lectura del fitxer .aocx file i la reprogramació de l'FPGA. Configurar la marca CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 és útil quan s'instancia el vostre tauler per verificar la funcionalitat de la vostra plataforma personalitzada sense dissenyar el plànol i especificar les regions LogicLock™.
Amb sistemes de memòria heterogenis, l'entorn d'execució ha de llegir les ubicacions de la memòria intermèdia de cada memòria intermèdia, descrites al fitxer .aocx. file, per verificar la funcionalitat dels sistemes de memòria. Tanmateix, és possible que vulgueu verificar la funcionalitat de la vostra plataforma personalitzada sense implementar les característiques finals del disseny de la placa, com ara dissenyar el plànol i especificar les regions de LogicLock.
- Verifiqueu que la marca CL_CONTEXT_COMPILER_MODE_INTELFPGA no estigui activada al vostre codi d'amfitrió.
- Navega al tauler/ /source/host/mmd directori de la vostra plataforma personalitzada.
- Obriu el dispositiu acl_pcie_device.cpp amb assignació de memòria (MMD) file en un editor de text.
- Modifiqueu la funció de reprogramació a acl_pcie_device.cpp file afegint un retorn 0; línia, com es mostra a continuació:
int ACL_PCIE_DEVICE::reprograma (void *data, size_t data_size)
{
retorn 0;
// suposar un fracàs
int reprogram_failed = 1;
// assumeix que no hi ha rbf ni hash a fpga.bin
int rbf_or_hash_not_provided = 1;
// assumeix que els hash de revisió base i d'importació no coincideixen
int hash_mismatch = 1;
…
} - Torneu a compilar el fitxer acl_pcie_device.cpp file.
- Verifiqueu que la marca CL_CONTEXT_COMPILER_MODE_INTELFPGA no estigui activada.
Atenció: Després d'afegir retorn 0; a la funció de reprogramació i recompileu el MMD file, l'entorn d'execució llegirà el fitxer .aocx file i assigneu les ubicacions de la memòria intermèdia, però no reprogramarà l'FPGA. Heu de fer coincidir manualment la imatge FPGA amb el .aocx file. Per revertir aquest comportament, elimineu return 0; des de la funció de reprogramació i recompileu l'MMD file.
1.6. Historial de revisions de documents
Data | Versió | Canvis |
desembre-17 | 2017.12.01 | • Es va canviar el nom de CL_MEM_HETEROGENEOUS_ALTERA a CL_MEM_HETEROGENEOUS_INTELFPGA. |
desembre-16 | 2016.12.13 | • Rebranding CL_CONTEXT_COMPILER_MODE_ALTERA a CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Creació de sistemes de memòria heterogènia a Intel® FPGA SDK per a OpenCL
Plataformes personalitzades
Envia comentaris
Versió en línia
Envia comentaris
ID: 683654
Versió: 2016.12.13
Documents/Recursos
![]() |
intel Creació de sistemes de memòria heterogènia en FPGA SDK per a plataformes personalitzades OpenCL [pdfInstruccions Creació de sistemes de memòria heterogènia en FPGA SDK per a plataformes personalitzades OpenCL, creació de sistemes de memòria heterogènia, FPGA SDK per a plataformes personalitzades OpenCL |