Resumen:
|
[ES] Los dispositivos FPGA de gama alta están equipados con tecnología de memoria
High Bandwidth Memory (HBM) de alta velocidad y bajo consumo, en chips de memoria apilados en 3D. Esta memoria permite que la FPGA alcance ...[+]
[ES] Los dispositivos FPGA de gama alta están equipados con tecnología de memoria
High Bandwidth Memory (HBM) de alta velocidad y bajo consumo, en chips de memoria apilados en 3D. Esta memoria permite que la FPGA alcance un ancho de banda
de memoria externa elevado. De esta forma, el rendimiento de las aplicaciones vinculadas a la memoria, como bases de datos, análisis o inferencia de redes neuronales, puede
obtener una mayor eficiencia.
No es fácil desarrollar una aplicación capaz de utilizar el máximo ancho de banda
disponible en una memoria HBM debido a muchos factores potenciales, como la variabilidad de los patrones de acceso a la memoria, la complejidad del algoritmo a implementar
en la FPGA, la complejidad de las herramientas, etc. Por lo tanto, el objetivo de este trabajo es identificar los cuellos de botella potenciales en el diseño, proceso que puede afectar
al rendimiento en el acceso a la memoria HBM.
En este trabajo utilizamos la Alveo U280 de Xilinx. Existen principalmente dos formas
de desarrollar una aplicación en este dispositivo: el flujo de desarrollo de aceleración de
Vitis y el diseño Custom Flow (flujo personalizado) con la suite Vivado Design.
El primero proporciona un marco para desarrollar aplicaciones aceleradas para FPGAs utilizando lenguajes de programación estándar para componentes de software y
hardware. El componente de software se desarrolla utilizando C/C++ y, en el caso de la
Alveo FPGA, se ejecuta en la CPU que se comunica con el dispositivo mediante PCIe;
los componentes de hardware, o kernels, en cambio, se pueden desarrollar utilizando
C/C++ o RTL y sintetizarse en la parte PL del dispositivo. Por tanto, es posible especificar las conexiones entre los núcleos y las memorias presentes en el dispositivo, e.j. HBM,
y todo el diseño se gestiona automáticamente.
Por otro lado, utilizando la aproximación Custom Flow, el diseño debe implementarse
manualmente: todos los componentes y sus conexiones deben instanciarse y configurarse manualmente. Este enfoque, aunque más complejo, puede potencialmente ofrecer un
mayor rendimiento.
Para comparar los dos enfoques, se ha implementado una aplicación simple que utiliza HBM con ambos flujos. Los dos enfoques se han evaluado principalmente en función
del rendimiento HBM resultante, pero también de la utilización de recursos, el consumo
de energía y la facilidad de desarrollo.
[-]
[EN] High-end FPGAs are equipped with high-speed and low-power High Bandwidth
Memory (HBM) technology, built using 3D-stacked memory chips. This memory allows
the FPGA to reach very high external memory bandwidth. In ...[+]
[EN] High-end FPGAs are equipped with high-speed and low-power High Bandwidth
Memory (HBM) technology, built using 3D-stacked memory chips. This memory allows
the FPGA to reach very high external memory bandwidth. In this way, performance for
memory-bound applications like databases, analytics or neural network inference can be
improved significantly.
Developing an application capable of utilizing the available HBM bandwidth is not
easy due to many potential factors such as pattern access variability, target design complexity, tools complexity, etc. Therefore, the goal of this work is to identify the potential
bottlenecks in the design process thay may affect HBM performance.
In this work we will be using the Xilinx’s Alveo U280. There are mainly two ways to
develop an application on this device: the Vitis Acceleration Development Flow and the
Custom Flow (Vivado Design). The first one provides a framework for developing FPGA accelerated applications using standard programming languages for both software and hardware components. The
software component is developed using C/C++ and, in the case of the Alveo FPGA, is
run on the CPU which communicates with the device using PCIe; the hardware components, or kernels, instead, can be developed using C/C++ or RTL and get synthesized
on the PL part of the device. It is then possible to specify the connections between the
kernels and the memories present on the device, like the HBM, and the whole design gets
managed automatically.
On the other hand, using the Custom Flow, the design must be manually implemented: all the components and their connections must be manually instantiated and
configured. This approach, while more complex, potentially may achieve higher performance.
To compare the two approaches, a simple application which uses the HBM has been
implemented using both flows. The two approaches have been evaluated mainly on the
resulting HBM performance, but also on resource utilization, power consumption and
ease of the development process.
[-]
|