Creación de sistemas de memoria heteroxéneas en FPGA SDK para plataformas personalizadas OpenCL
Instrucións
Creación de sistemas de memoria heteroxéneas en Intel® FPGA SDK para plataformas personalizadas OpenCL
A implementación de memoria heteroxénea nunha plataforma personalizada permite un maior ancho de banda da interface de memoria externa (EMIF) así como accesos á memoria máis grandes e máis rápidos. A combinación de acceso á memoria heteroxénea cun acceso optimizado
O núcleo OpenCL ™(1) pode producir melloras significativas no rendemento do seu sistema OpenCL.
Esta nota da aplicación ofrece orientación sobre a creación de sistemas de memoria heteroxéneos nunha plataforma personalizada para usar co SDK Intel® FPGA para OpenCL(2). Intel asume que es un deseñador experimentado de FPGA que está a desenvolver plataformas personalizadas que contén sistemas de memoria heteroxéneos.
Antes de crear os sistemas de memoria heteroxéneas, familiarícese co SDK de Intel FPGA para documentos OpenCL especificados a continuación.
Información relacionada
- Guía de programación Intel FPGA SDK para OpenCL
- Guía de prácticas recomendadas de Intel FPGA SDK para OpenCL
- Intel FPGA SDK para OpenCL Arria 10 GX FPGA Development Kit Reference Platform Porting Guide
1.1. Verificando a funcionalidade da placa FPGA e das interfaces EMIF
Verifique cada interface de memoria de forma independente e, a continuación, instancie a súa plataforma personalizada mediante a memoria global.
- Verifique cada interface de memoria mediante deseños de hardware que poidan probar a velocidade e a estabilidade de cada interface.
- Crea unha instancia da túa plataforma personalizada usando memoria global.
- Por example, se tes tres interfaces DDR, unha delas debe mapear como memoria heteroxénea. Neste caso, verifique a funcionalidade da pila OpenCL con cada interface DDR de forma independente.
OpenCL e o logotipo de OpenCL son marcas comerciais de Apple Inc. utilizadas con permiso de Khronos Group™. - O SDK Intel FPGA para OpenCL baséase nunha especificación de Khronos publicada e pasou o proceso de proba de conformidade de Khronos. O estado de conformidade actual pódese consultar en www.khronos.org/conformance.
- Por example, se tes tres interfaces DDR, unha delas debe mapear como memoria heteroxénea. Neste caso, verifique a funcionalidade da pila OpenCL con cada interface DDR de forma independente.
Intel Corporation. Todos os dereitos reservados. Intel, o logotipo de Intel e outras marcas de Intel son marcas comerciais de Intel Corporation ou das súas subsidiarias. Intel garante o rendemento dos seus produtos FPGA e semicondutores segundo as especificacións actuais de acordo coa garantía estándar de Intel, pero resérvase o dereito de facer cambios en calquera produto e servizo en calquera momento e sen previo aviso. Intel non asume ningunha responsabilidade ou responsabilidade derivada da aplicación ou uso de calquera información, produto ou servizo descrito aquí, salvo que Intel o acorde expresamente por escrito. Recoméndase aos clientes de Intel que obteñan a versión máis recente das especificacións do dispositivo antes de confiar en calquera información publicada e antes de facer pedidos de produtos ou servizos. *Outros nomes e marcas poden ser reclamados como propiedade doutros.
Certificado ISO 9001:2015
Alternativamente, se tes dúas interfaces DDR e unha interface de velocidade de datos cuádruple (QDR), verifique a funcionalidade da pila OpenCL das dúas interfaces DDR e a interface QDR de forma independente.
Intel recomenda que use deseños exclusivos de PCI Express® (PCIe® -) ou EMIF para probar as súas interfaces de memoria. Despois de verificar que cada interface de memoria é funcional e que o seu deseño de OpenCL funciona cun subconxunto das interfaces de memoria, continúe
para crear un sistema de memoria heteroxénea totalmente funcional.
1.2. Modificando o ficheiro board_spec.xml File
Modifique o ficheiro board_spec.xml file para especificar os tipos de sistemas de memoria heteroxénea que están dispoñibles para os núcleos OpenCL.
Durante a compilación do núcleo, o Intel FPGA SDK for OpenCL Offline Compiler asigna argumentos do núcleo a unha memoria en función do argumento da localización do búfer que especifique.
1. Navega ata o board_spec.xml file no directorio de hardware da súa plataforma personalizada.
2. Abre o ficheiro board_spec.xml file nun editor de texto e modifique o XML en consecuencia.
Por example, se o seu sistema de hardware ten dúas memorias DDR como memoria global predeterminada e dous bancos QDR que modela como memoria heteroxénea, modifique as seccións de memoria do ficheiro board_spec.xml file para asemellarse ao seguinte:
1.3. Configurar varios divisores de memoria en Qsys
Actualmente, o divisor de bancos de memoria OpenCL no deseño Qsys non admite un número de bancos de memoria que non sexan de potencia de 2, o que non é unha limitación para as configuracións típicas. Non obstante, hai escenarios nos que se necesitan interfaces de memoria sen potencia de 2. Para acomodar un número de interfaces de memoria que non sexan de potencia de 2, use varios divisores de bancos de memoria OpenCL para crear sistemas de memoria heteroxéneos cun número de bancos de memoria non de potencia de 2. Debes crear varios divisores de bancos de memoria OpenCL cando tes un verdadeiro sistema de memoria heteroxéneo. Considere un sistema cunha interface de memoria DDR e unha interface de memoria QDR. Dado que os dous bancos teñen diferentes topoloxías de memoria, non pode combinalos nunha única memoria global.
Figura 1. Diagrama de bloques dun sistema de memoria heteroxénea de tres bancos
Este sistema de memoria heteroxénea contén dúas interfaces de memoria DDR e unha interface de memoria QDR.Se está a usar a versión 16.0, 16.0.1 ou 16.0.2 do software Intel Quartus® Prime e o SDK Altera para OpenCL, o divisor de bancos de memoria OpenCL xestiona incorrectamente as ráfagas de memoria entre os límites dos enderezos. Para solucionar este problema coñecido, engade unha ponte de canalización cun tamaño de ráfaga de 1 e conecte o seu mestre Avalon ®Memory-Mapped (Avalon-MM) ao porto escravo do divisor de bancos de memoria OpenCL.
Nota:
Este problema coñecido solucionouse no software Intel Quartus Prime e no SDK Intel FPGA para OpenCL versión 16.1.
Figura 2. Diagrama de bloques dun sistema de memoria heteroxénea de tres bancos cunha ponte de canalización 1.4. Modificando o programa Boardtest e o código de host para a súa solución de memoria heteroxénea
Use o kernel boardtest.cl que inclúe o Intel FPGA SDK for OpenCL Custom Platform Toolkit para probar a funcionalidade e o rendemento da súa plataforma personalizada.
O programa boardtest é un núcleo OpenCL que che permite probar o ancho de banda de host a dispositivo, ancho de banda de memoria e a funcionalidade xeral da túa plataforma personalizada.
- Navega ata o Directorio /board/ custom_platform_toolkit/tests/boardtest.
- Abre o boardtest.cl file nun editor de texto e asigne unha localización do búfer a cada argumento de memoria global.
Por exampLe:
__núcleo baleiro
mem_stream (__global__attribute__((buffer_location(“DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
Aquí, uint *src asígnase á memoria DDR e uint *dst á memoria QDR. O ficheiro board_spec.xml file especifica as características de ambos os sistemas de memoria. - Para aproveitar a túa solución de memoria heteroxénea no teu sistema OpenCL, modifica o teu código de host engadindo a marca CL_MEM_HETEROGENEOUS_INTELFPGA á túa chamada clCreateBuffer.
Por exampLe:
ddatain = clCreateBuffer (contexto, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof (sen asinar) * vectorSize, NULL, &status);
Intel recomenda encarecidamente que configure a localización do búfer como argumento do núcleo antes de escribir o búfer. Cando se utiliza unha única memoria global, pode escribir os búfers antes ou despois de asignalos a un argumento do núcleo. En sistemas de memoria heteroxénea, o host establece a localización do búfer antes de escribir o búfer. Noutras palabras, o servidor chamará á función clSetKernelArgument antes de chamar á función clEnqueueWriteBuffer.
No seu código de host, invoque as chamadas clCreateBuffer, clSetKernelArg e clEnqueueWriteBuffer na seguinte orde:
ddatain = clCreateBuffer(contexto, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, sizeof (sen asinar) * 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);
O ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file presenta unha orde similar destas chamadas de función. - Despois de modificar o boardtest.cl file e o código do host, compilar o código do host e do núcleo e verificar a súa funcionalidade.
Ao compilar o código do kernel, debe desactivar o intercalado en ráfaga de todos os sistemas de memoria incluíndo o –no-interleaving opción no comando aoc.
Información relacionada
Desactivando o intercalado en ráfaga da memoria global (–sen intercalar )
1.5. Verificando a funcionalidade da súa memoria heteroxénea Sistema
Para garantir que o sistema de memoria heteroxénea funciona correctamente, desactive a marca CL_CONTEXT_COMPILER_MODE_INTELFPGA no seu código de host.
Nos sistemas OpenCL con memoria homoxénea, tes que a opción de establecer a marca CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 no teu código de host para desactivar a lectura do .aocx file e a reprogramación da FPGA. Establecer a marca CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 é útil cando se crea unha instancia do seu taboleiro para verificar a funcionalidade da súa plataforma personalizada sen deseñar o plano e especificar as rexións de LogicLock™.
Con sistemas de memoria heteroxéneas, o ambiente de execución debe ler as localizacións do búfer de cada búfer, descritas no .aocx file, para verificar a funcionalidade dos sistemas de memoria. Non obstante, pode querer verificar a funcionalidade da súa plataforma personalizada sen implementar as características finais do deseño do taboleiro, como deseñar o plano e especificar as rexións de LogicLock.
- Verifique que a marca CL_CONTEXT_COMPILER_MODE_INTELFPGA non estea configurada no código de host.
- Navega ata o taboleiro/ /source/host/mmd directorio da súa plataforma personalizada.
- Abre o dispositivo mapeado de memoria (MMD) acl_pcie_device.cpp file nun editor de texto.
- Modifique a función de reprogramación no acl_pcie_device.cpp file engadindo un retorno 0; liña, como se mostra a continuación:
int ACL_PCIE_DEVICE::reprograma (void *datos, tamaño_t tamaño_datos)
{
devolver 0;
// asumir o fracaso
int reprogram_failed = 1;
// asumir que non hai rbf nin hash en fpga.bin
int rbf_or_hash_not_provided = 1;
// asumir que os hash de revisión base e importación non coinciden
int hash_mismatch = 1;
…
} - Volve compilar acl_pcie_device.cpp file.
- Verifique que a bandeira CL_CONTEXT_COMPILER_MODE_INTELFPGA segue sen configurar.
Atención: Despois de engadir retorno 0; á función de reprogramación e recompilar o MMD file, o ambiente de execución lerá o .aocx file e asignar as localizacións do búfer pero non reprogramará o FPGA. Debes facer coincidir manualmente a imaxe FPGA co .aocx file. Para reverter este comportamento, elimine return 0; desde a función de reprogramación e recompilar o MMD file.
1.6. Historial de revisións de documentos
Data | Versión | Cambios |
Dec-17 | 2017.12.01 | • Cambiou o nome de CL_MEM_HETEROGENEOUS_ALTERA a CL_MEM_HETEROGENEOUS_INTELFPGA. |
Dec-16 | 2016.12.13 | • Cambiou o nome de CL_CONTEXT_COMPILER_MODE_ALTERA a CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Creación de sistemas de memoria heteroxéneas en Intel® FPGA SDK para OpenCL
Plataformas personalizadas
Enviar comentarios
Versión en liña
Enviar comentarios
Código: 683654
Versión: 2016.12.13
Documentos/Recursos
![]() |
intel Creación de sistemas de memoria heteroxénea en FPGA SDK para plataformas personalizadas OpenCL [pdfInstrucións Creación de sistemas de memoria heteroxéneas en FPGA SDK para plataformas personalizadas OpenCL, creación de sistemas de memoria heteroxéneas, SDK FPGA para plataformas personalizadas OpenCL |