HPVM, un compilador de la mano de LLVM para CPU, GPU, FPGA y aceleradores de hardware
Hace poco el proyecto LLVM dio a conocer el lanzamiento de la nueva versión del compilador HPVM 2.0 (Heterogeneous Parallel Virtual Machine), cuyo objetivo es simplificar la programación para sistemas y proporcionar herramientas para generar código para CPU, GPU, FPGA y aceleradores de hardware específicos de dominio.
La programación de sistemas paralelos heterogéneos es complicada debido a la presencia en un sistema de componentes que usan diferentes modelos para lograr el paralelismo (núcleos de CPU, instrucciones vectoriales, GPU, etc.), diferentes conjuntos de instrucciones y diferentes jerarquías de memoria. Cada sistema utiliza su propia combinación de estos componentes.
La idea principal del proyecto HPVM es usar una representación unificada de programas ejecutables paralelos al compilar, que se puede usar para varios tipos de hardware que admiten computación paralela, incluidas GPU, instrucciones vectoriales, procesadores multinúcleo, FPGA y varios chips aceleradores especializados.
A diferencia de otros sistemas, HPVM intentó combinar tres posibilidades para organizar la computación heterogénea: una representación intermedia (IR), una arquitectura de conjunto de instrucciones virtuales (V-ISA) y programación de tiempo de ejecución, independientemente del lenguaje de programación y el hardware.
La representación intermedia HPVM amplía la representación intermedia de las instrucciones LLVM mediante el uso de un gráfico de flujo de datos jerárquico para capturar el paralelismo a nivel de tareas, datos y canalizaciones computacionales. La representación intermedia de HPVM también incluye instrucciones vectoriales y memoria compartida. El objetivo principal de usar una representación intermedia es la generación y optimización de código eficiente para sistemas heterogéneos.
La arquitectura de conjunto de instrucciones virtuales (V-ISA) abstrae el hardware de bajo nivel y unifica varias formas de paralelismo y arquitecturas de memoria utilizando solo el modelo de concurrencia subyacente, el gráfico de flujo de datos.
V-ISA permite lograr portabilidad entre diferentes tipos de hardware para computación paralela y posibilita no perder rendimiento al utilizar diferentes elementos de sistemas heterogéneos. Virtual ISA también se puede usar para entregar un código ejecutable de programa genérico que se puede ejecutar en CPU, GPU, FPGA y varios aceleradores.
Las políticas de programación de procesos informáticos flexibles se aplican en tiempo de ejecución y se implementan sobre la base de información sobre el programa (estructura gráfica) y mediante la compilación de nodos de programas individuales para su ejecución en cualquiera de los dispositivos informáticos de destino disponibles en el sistema.
Los generadores de código desarrollados por el proyecto son capaces de traducir los nodos de aplicación definidos mediante ISA virtual para ejecutarse en GPU NVIDIA (cuDNN y OpenCL), instrucciones vectoriales Intel AVX, FPGA y CPU x86 multinúcleo. Se observa que el rendimiento de los resultados de los traductores HPVM es comparable al código OpenCL escrito manualmente para GPU y dispositivos informáticos vectoriales.
Principales novedades de HPVM 2.0
Por la parte de las novedades que se presentan en esta nueva versión, se destacan las siguientes:
- Se propone el frontend del lenguaje Hetero-C++, que simplifica la paralelización del código de la aplicación en lenguajes C/C++ para su compilación en HPVM. Hetero-C++ define extensiones para el paralelismo de nivel de datos y tareas jerárquicas que se asignan a gráficos de subprocesos de HPVM.
- Se ha agregado un backend de FPGA para admitir la ejecución de código en un FPGA de Intel. Para organizar la ejecución se utiliza Intel FPGA SDK for OpenCL.
- Se ha agregado el marco DSE (Design Space Exploration), que incluye optimizaciones del compilador y mecanismos de detección de cuellos de botella para ajustar automáticamente las aplicaciones para una plataforma de hardware determinada.
- El marco contiene un modelo de rendimiento listo para usar para FPGA de Intel y le permite conectar sus propios procesadores para optimizar cualquier dispositivo compatible con HPVM.
- Las optimizaciones se pueden aplicar tanto a nivel de gráfico de flujo de datos de HPVM como a nivel de LLVM.
- Componentes de LLVM actualizados a la versión 13.0 .
- El código se ha reorganizado para facilitar la navegación a través de la base de código, las bibliotecas y las utilidades.
- Se mejoró la infraestructura para las pruebas, se agregaron nuevas pruebas para varios componentes de HPVM.
Finalmente, si estás interesado en poder conocer más al respecto de HPVM, puedes consultar los detalles en el siguiente enlace.