Development and Validation of a Research Instrument
3.8 Conclusion
de datos
Como se ha visto anteriormente, la comunicación con las memorias locales es muy importante, así como lo es la comunicación de la FPGA con la memoria global o con el PS. Cabe destacar que SDSoC no permite implementar la comunicación entre PL y PS sin utilizar pragmas de configuración si el volumen de datos a transmitir es muy elevado, como es el caso de esta aplicación. Por ello, en una primera instancia se realizó la transmisión de una ventana de píxeles para buscar los vecinos de un único píxel, por lo que se debían realizar tantas llamadas a la función como píxeles tuviera la imagen. Tras esta implementación se crearon dos nuevas configuraciones para optimizar la comunicación, usando los pragmas zero_copy y access_pattern [7] [17].
3.3.6.1Comunicación mediante zero_copy
El pragma zero_copy permite realizar una transacción de tipo zero_copy cuya característica es permitir que
el procesador no tenga que copiar los datos de un lugar de la memoria a otro. Este pragma implementa un bus AXI4 directamente desde el PL a la memoria global o compartida, lo que evita la transmisión de datos entre el PS y PL. Al especificar este pragma se genera un protoclo Axi_master, donde el PL pasa a ser el maestro de la comunicación, es decir, el que la gestiona, mientras que la memoria es el esclavo, esto es, la que responde a la comunicación iniciada por el maestro. En consecuencia, la función implementada en el hardware debe tener una variable de retorno para que el PS pueda continuar con la ejecución de la aplicación. Al tener esta limitación, con este tipo de pragma no es posible realizar llamadas no bloqueantes a una misma función. Por su parte, el pragma zero_copy debe ser utilizado justo antes de la definición de la función que se pretende que realice la comunicación. Un ejemplo de cómo definir este pragma se muestra en la Fig. 3.32:
En la definición zero_copy se pueden añadir dos parámetros más: offset, que constituye un puntero a la dirección inicial de lectura, y length, que hace referencia al rango de direcciones que se desea acceder.
Con la herramienta de SDSoC Event Tracing [17], que permite analizar el rendimiento de las comunicaciones, se puede estudiar el impacto de cada uno de los pragmas de comunicaciones. La Fig. 3.33 muestra los eventos que se producen entre PS y PL para procesar varios píxeles cuando no existe ningún pragma de comunicación, es decir, SDSoC ha implementado la comunicación teniendo en cuenta el tipo de variable que se desea transmitir. Esta figura ha sido obtenida al comunicar los datos que contiene la ventana de análisis para el cálculo de un único píxel por llamada a función, donde SDSoC implementó un interfaz RAM para la comunicación, puesto que son variables de tipo array y no se especifica al sintetizador que se han almacenado de manera contigua en memoria, este interfaz será definido en el apartado 3.3.6.2. En la figura pueden diferenciarse tres colores: naranja y verde, para indicar que el PS o el PL están activos, respectivamente; y azul, para representar las transferencias de datos entre PS y PL.
Fig. 3.33 Event Tracing de comunicación estándar de varios píxeles
Para poder analizar en detalle una comunicación de este tipo, se realiza un zoom sobre la comunicación de un píxel (Fig. 3.34). En esta figura se puede observar que, en primer lugar, el PS genera varios eventos para el inicio de la comunicación (color naranja). Estos eventos son las siguientes:
• cmdSend: el PS envía un comando al PL para que se active • cmdWait: el PS espera a que se inicie el PL
• send: comienza la transferencia de datos desde el PS
• receive: comienzan a recibirse los datos iniciales enviados por el PS • wait: espera hasta que la trasferencia de datos se complete
Tras finalizar el evento send de cada una de las variables a transmitir, se produce la transmisión de datos (color azul). Como se puede ver la transferencia de datos se realiza en paralelo. Esto es posible pues el interfaz AXI4 sobre el que se implementó el interfaz RAM es de 64 bits lo que permite transmitir estas 3 variables en paralelo; y, una vez acabada ésta, el PL comienza a trabajar (color verde). Se debe destacar que la comunicación del PL al PS, devolviendo los resultados obtenidos por el PL, es tan pequeña que en la Fig. 3.34 no se puede apreciar, ya que habría que realizar zoom justo cuando el PL acaba de procesar, momento en el que se enviarían los resultados desde el PL al PS.
Fig. 3.34 Event Tracing de comunicación estándar de un píxel
Si en lugar de realizar el estudio de la comunicación estándar se realiza con el pragma zero_copy, el diagrama obtenido será diferente, ya que no existe transmisión de datos entre PS y PL, tal y como se muestra en la Fig. 3.35. En este modo, no se muestra la barra de transmisión de datos, puesto que el PL gestiona la comunicación directamente con la memoria global.
Fig. 3.35 Event Tracing de comunicación con pragma Zero_Copy de un píxel