Creación de sistemas de memoria heterogéneos en FPGA SDK para plataformas personalizadas OpenCL
Instrucciones
Creación de sistemas de memoria heterogéneos en Intel® FPGA SDK para plataformas personalizadas OpenCL
La implementación de memoria heterogénea en una plataforma personalizada permite más ancho de banda de interfaz de memoria externa (EMIF), así como accesos a memoria más grandes y rápidos. La combinación de acceso heterogéneo a la memoria con un optimizado
El kernel OpenCL ™(1) puede generar mejoras significativas en el rendimiento de su sistema OpenCL.
Esta nota de aplicación proporciona orientación sobre la creación de sistemas de memoria heterogéneos en una plataforma personalizada para usar con Intel® FPGA SDK para OpenCL(2). Intel supone que usted es un diseñador de FPGA experimentado que está desarrollando plataformas personalizadas que contienen sistemas de memoria heterogéneos.
Antes de crear sistemas de memoria heterogéneos, familiarícese con los documentos Intel FPGA SDK para OpenCL que se especifican a continuación.
Información relacionada
- Guía de programación Intel FPGA SDK para OpenCL
- Guía de mejores prácticas del SDK Intel FPGA para OpenCL
- Guía de portabilidad de plataforma de referencia del kit de desarrollo FPGA Intel FPGA SDK para OpenCL Arria 10 GX
1.1. Verificación de la funcionalidad de la placa FPGA y las interfaces EMIF
Verifique cada interfaz de memoria de forma independiente y luego cree una instancia de su plataforma personalizada utilizando la memoria global.
- Verifique cada interfaz de memoria utilizando diseños de hardware que puedan probar la velocidad y la estabilidad de cada interfaz.
- Cree una instancia de su plataforma personalizada utilizando la memoria global.
- Por ejemploampPor ejemplo, si tiene tres interfaces DDR, una de ellas debe asignarse como memoria heterogénea. En este caso, verifique la funcionalidad de la pila OpenCL con cada interfaz DDR de forma independiente.
OpenCL y el logotipo de OpenCL son marcas comerciales de Apple Inc. utilizadas con permiso de Khronos Group™. - El SDK de FPGA de Intel para OpenCL se basa en una especificación de Khronos publicada y ha pasado el proceso de prueba de conformidad de Khronos. El estado de conformidad actual se puede encontrar en www.khronos.org/conformance.
- Por ejemploampPor ejemplo, si tiene tres interfaces DDR, una de ellas debe asignarse como memoria heterogénea. En este caso, verifique la funcionalidad de la pila OpenCL con cada interfaz DDR de forma independiente.
Corporación Intel. Reservados todos los derechos. Intel, el logotipo de Intel y otras marcas de Intel son marcas comerciales de Intel Corporation o sus subsidiarias. Intel garantiza el rendimiento de sus productos semiconductores y FPGA según las especificaciones actuales de acuerdo con la garantía estándar de Intel, pero se reserva el derecho de realizar cambios en cualquier producto y servicio en cualquier momento sin previo aviso. Intel no asume ninguna responsabilidad que surja de la aplicación o el uso de cualquier información, producto o servicio descrito en este documento, excepto que Intel lo acuerde expresamente por escrito. Se recomienda a los clientes de Intel que obtengan la última versión de las especificaciones del dispositivo antes de confiar en cualquier información publicada y antes de realizar pedidos de productos o servicios. *Otros nombres y marcas pueden reclamarse como propiedad de otros.
ISO 9001: 2015 registrado
Alternativamente, si tiene dos interfaces DDR y una interfaz de velocidad de datos cuádruple (QDR), verifique la funcionalidad de la pila OpenCL de las dos interfaces DDR y la interfaz QDR de forma independiente.
Intel recomienda que utilice diseños PCI Express® – (PCIe® -) o exclusivos de EMIF para probar sus interfaces de memoria. Después de verificar que cada interfaz de memoria sea funcional y que su diseño OpenCL funcione con un subconjunto de interfaces de memoria, continúe
para crear un sistema de memoria heterogéneo completamente funcional.
1.2. Modificando el board_spec.xml File
Modificar board_spec.xml file para especificar los tipos de sistemas de memoria heterogéneos que están disponibles para los núcleos OpenCL.
Durante la compilación del kernel, Intel FPGA SDK para OpenCL Offline Compiler asigna argumentos del kernel a una memoria según el argumento de ubicación del búfer que usted especifique.
1. Vaya a board_spec.xml file en el directorio de hardware de su plataforma personalizada.
2. Abra board_spec.xml file en un editor de texto y modifique el XML en consecuencia.
Por ejemploamparchivo, si su sistema de hardware tiene dos memorias DDR como memoria global predeterminada y dos bancos QDR que modela como memoria heterogénea, modifique las secciones de memoria del archivo board_spec.xml. file para parecerse a lo siguiente:
1.3. Configuración de múltiples divisores de memoria en Qsys
Actualmente, el divisor de bancos de memoria OpenCL en el diseño Qsys no admite un número de bancos de memoria que no sea de potencia de 2, lo cual no es una limitación para las configuraciones típicas. Sin embargo, hay escenarios en los que se necesita un número de interfaces de memoria que no sea potencia de 2. Para acomodar un número de interfaces de memoria que no sea potencia de 2, utilice múltiples divisores de bancos de memoria OpenCL para crear sistemas de memoria heterogéneos con un número de bancos de memoria que no sea potencia de 2. Debe crear varios divisores de banco de memoria OpenCL cuando tenga un sistema de memoria verdaderamente heterogéneo. Considere un sistema con una interfaz de memoria DDR y una interfaz de memoria QDR. Debido a que los dos bancos tienen diferentes topologías de memoria, no se pueden combinar en una única memoria global.
Figura 1. Diagrama de bloques de un sistema de memoria heterogéneo de tres bancos
Este sistema de memoria heterogéneo contiene dos interfaces de memoria DDR y una interfaz de memoria QDR.Si está utilizando la versión 16.0, 16.0.1 o 16.0.2 del software Intel Quartus® Prime y Altera SDK para OpenCL, OpenCL Memory Bank Divider maneja incorrectamente las ráfagas de memoria a través de los límites de direcciones. Para solucionar este problema conocido, agregue un puente de canalización con un tamaño de ráfaga de 1 y conecte su maestro Avalon ®Memory-Mapped (Avalon-MM) al puerto esclavo del OpenCL Memory Bank Divider.
Nota:
Este problema conocido se solucionó en el software Intel Quartus Prime y el SDK Intel FPGA para OpenCL versión 16.1.
Figura 2. Diagrama de bloques de un sistema de memoria heterogéneo de tres bancos con un puente de canalización 1.4. Modificación del programa Boardtest y el código de host para su solución de memoria heterogénea
Utilice el kernel boardtest.cl que viene con Intel FPGA SDK para OpenCL Custom Platform Toolkit para probar la funcionalidad y el rendimiento de su plataforma personalizada.
El programa boardtest es un kernel OpenCL que le permite probar el ancho de banda del host al dispositivo, el ancho de banda de la memoria y la funcionalidad general de su plataforma personalizada.
- Navega hasta el Directorio /board/ custom_platform_toolkit/tests/boardtest.
- Abre el tablerotest.cl file en un editor de texto y asigne una ubicación de búfer a cada argumento de memoria global.
Por ejemploampen:
__núcleo vacío
mem_stream (__global__attribute__((buffer_location(“DDR”))) uint *src, __global __attribute__((buffer_location(“QDR”))) uint *dst, uint arg, uint arg2)
Aquí, uint *src se asigna a la memoria DDR y uint *dst se asigna a la memoria QDR. El board_spec.xml file especifica las características de ambos sistemas de memoria. - Para aprovechar su solución de memoria heterogénea en su sistema OpenCL, modifique su código de host agregando el indicador CL_MEM_HETEROGENEOUS_INTELFPGA a su llamada clCreateBuffer.
Por ejemploampen:
ddatain = clCreateBuffer(contexto, CL_MEM_READ_WRITE | memflags
CL_MEM_HETEROGENEOUS_INTELFPGA, tamaño de (sin firmar) * vectorSize, NULL, &status);
Intel recomienda encarecidamente que establezca la ubicación del búfer como argumento del núcleo antes de escribir el búfer. Cuando se utiliza una única memoria global, puede escribir los buffers antes o después de asignarlos a un argumento del kernel. En sistemas de memoria heterogéneos, el host establece la ubicación del búfer antes de escribir el búfer. En otras palabras, el host llamará a la función clSetKernelArgument antes de llamar a la función clEnqueueWriteBuffer.
En su código de host, invoque las llamadas clCreateBuffer, clSetKernelArg y clEnqueueWriteBuffer en el siguiente orden:
ddatain = clCreateBuffer(contexto, CL_MEM_READ_WRITE | memflags |
CL_MEM_HETEROGENEOUS_INTELFPGA, tamaño de (sin firmar) * vectorSize, NULL, &status);
… estado = clSetKernelArg(kernel[k], 0, sizeof(cl_mem), (void*)&ddatain);
… estado = clEnqueueWriteBuffer(cola, ddatain, CL_FALSE, 0, sizeof(unsigned) * vectorSize,hdatain, 0, NULL, NULL);
ALTERAOCLSDKROOT/board/custom_platform_toolkit/tests/boardtest/host/memspeed.cpp file presenta un orden similar de estas llamadas a funciones. - Después de modificar el boardtest.cl file y el código del host, compilar el código del host y del kernel y verificar su funcionalidad.
Al compilar el código del kernel, debe desactivar el intercalado en ráfagas de todos los sistemas de memoria incluyendo la opción –no-interleaving. opción en el comando aoc.
Información relacionada
Desactivación del intercalado en ráfagas de la memoria global (–sin intercalado )
1.5. Verificando la funcionalidad de su memoria heterogénea Sistema
Para garantizar que el sistema de memoria heterogénea funcione correctamente, desactive el indicador CL_CONTEXT_COMPILER_MODE_INTELFPGA en su código de host.
En sistemas OpenCL con memoria homogénea, tiene la opción de configurar el indicador CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 en su código de host para deshabilitar la lectura del .aocx. file y la reprogramación de la FPGA. Configurar el indicador CL_CONTEXT_COMPILER_MODE_INTELFPGA=3 es útil al crear instancias de su tablero para verificar la funcionalidad de su plataforma personalizada sin diseñar el plano y especificar las regiones de LogicLock™.
Con sistemas de memoria heterogéneos, el entorno de ejecución debe leer las ubicaciones del búfer de cada búfer, que se describen en el archivo .aocx. file, para verificar la funcionalidad de los sistemas de memoria. Sin embargo, es posible que desee verificar la funcionalidad de su plataforma personalizada sin implementar las características finales del diseño de la placa, como diseñar el plano y especificar las regiones LogicLock.
- Verifique que el indicador CL_CONTEXT_COMPILER_MODE_INTELFPGA no esté configurado en su código de host.
- Navegar al tablero/ Directorio /source/host/mmd de su plataforma personalizada.
- Abra el dispositivo mapeado en memoria (MMD) acl_pcie_device.cpp file en un editor de texto.
- Modifique la función de reprogramación en acl_pcie_device.cpp file agregando un retorno 0; línea, como se muestra a continuación:
int ACL_PCIE_DEVICE::reprogramar(void *data, size_t data_size)
{
devuelve 0;
// asume el fracaso
int reprogram_failed = 1;
// asume que no hay rbf o hash en fpga.bin
int rbf_or_hash_not_provided = 1;
// suponemos que los hashes de revisión base e importación no coinciden
int hash_mismatch = 1;
…
} - Vuelva a compilar acl_pcie_device.cpp file.
- Verifique que el indicador CL_CONTEXT_COMPILER_MODE_INTELFPGA permanezca sin configurar.
Atención: Después de agregar, devuelve 0; a la función de reprogramación y recompilar el MMD file, el entorno de ejecución leerá el .aocx file y asignará las ubicaciones del buffer pero no reprogramará la FPGA. Debe hacer coincidir manualmente la imagen FPGA con el .aocx file. Para revertir este comportamiento, elimine return 0; desde la función de reprogramación y recompilar el MMD file.
1.6. Historial de revisión de documentos
Fecha | Versión | Cambios |
17 de diciembre | 2017.12.01 | • Se cambió el nombre de CL_MEM_HETEROGENEOUS_ALTERA a CL_MEM_HETEROGENEOUS_INTELFPGA. |
16 de diciembre | 2016.12.13 | • Se cambió el nombre de CL_CONTEXT_COMPILER_MODE_ALTERA a CL_CONTEXT_COMPILER_MODE_INTELFPGA. |
Creación de sistemas de memoria heterogéneos en Intel® FPGA SDK para OpenCL
Plataformas personalizadas
Enviar comentarios
Versión en línea
Enviar comentarios
Identificación: 683654
Versión: 2016.12.13
Documentos / Recursos
![]() |
Intel crea sistemas de memoria heterogéneos en FPGA SDK para plataformas personalizadas OpenCL [pdf] Instrucciones Creación de sistemas de memoria heterogéneos en FPGA SDK para plataformas personalizadas OpenCL, Creación de sistemas de memoria heterogéneos, FPGA SDK para plataformas personalizadas OpenCL |