HPVM un compilador basado en LLVM para CPU, GPU, FPGA y aceleradores
Los desarrolladores del proyecto LLVM dieron a conocer recientemente la liberación del compilador Heterogeneous Parallel Virtual Machine (HPVM) 1.0, que tiene como objetivo simplificar la programación para sistemas heterogéneos y proporciona herramientas de generación de código para CPU, GPU, FPGA y aceleradores de hardware específicos de dominio (el soporte para FGPA y aceleradores fue no incluido en la versión 1.0).
La idea principal detrás de HPVM es compilar una representación unificada de programas ejecutables simultáneamente que se pueden usar para ejecutar en una variedad de hardware paralelo, incluidas GPU, instrucciones vectoriales, procesadores multinúcleo, FPGA y varios chips aceleradores especializados.
La programación para sistemas paralelos heterogéneos se complica por la presencia en un sistema de componentes (núcleos de CPU, instrucciones vectoriales, GPU, etc.) que utilizan diferentes modelos para lograr el paralelismo, diferentes conjuntos de instrucciones y diferentes jerarquías de memoria, y cada sistema tiene una combinación de tales componentes está cambiando.
El grupo de investigación del compilador LLVM de Illinois se complace en anunciar el lanzamiento de código abierto de HPVM (versión 1.0). HPVM es una infraestructura de compilador reorientable que apunta a CPU, GPU y aceleradores (esta versión no incluye soporte de aceleradores) [1]. HPVM utiliza un IR de compilador independiente del destino que amplía el IR del compilador LLVM 9.0.0 con una representación de flujo de datos jerárquica explícita que captura tareas, datos y paralelismo de canalización.
Esta versión es una adición importante a nuestra primera versión (versión 0.5), que agrega soporte para operaciones de tensor de álgebra lineal, interfaces Pytorch y Keras, aproximaciones para operadores de convolución y un marco eficiente y flexible para el ajuste de aproximación.
Cabe señalar que el uso de HPVM puede lograr ganancias de rendimiento significativas ya que el rendimiento de la salida de los traductores HPVM es comparable al del código OpenCL escrito a mano para GPU y dispositivos de computación vectorial. A diferencia de otros sistemas, HPVM intentó combinar tres posibilidades para organizar la computación heterogénea: representación intermedia independiente del lenguaje y del hardware, arquitectura de conjunto de instrucciones virtuales (V-ISA) y programación en tiempo de ejecución.
La representación intermedia independiente (IR) del sistema de destino y del lenguaje de programación que se utiliza en HPVM se basa en la representación intermedia de las instrucciones LLVM 9.0 y la amplía con un gráfico de flujo de datos jerárquico para cubrir el paralelismo a nivel de tareas, datos y canalizaciones computacionales.
El intermedio de HPVM también incluye instrucciones vectoriales y memoria compartida. El objetivo principal de utilizar la representación intermedia es la generación y optimización de código eficiente para sistemas heterogéneos.
Virtual Instruction Set Architecture (V-ISA) abstrae características de hardware de bajo nivel y unifica varias formas de paralelismo y arquitecturas de memoria utilizando solo el modelo de concurrencia básico, el gráfico de flujo de datos. V-ISA permite lograr portabilidad entre diferentes tipos de equipos de cómputo paralelo y permite no perder rendimiento al utilizar diferentes elementos de sistemas heterogéneos. Virtual ISA también se puede utilizar para proporcionar código de programa ejecutable universal que se puede ejecutar utilizando CPU, GPU, FPGA y varios aceleradores.
En la etapa actual de desarrollo, HPVM ofrece generadores de código capaces de traducir los nodos de aplicación definidos mediante ISA virtual para su ejecución mediante GPU NVIDIA (cuDNN y OpenCL), instrucciones vectoriales Intel AVX y CPU x86 de varios núcleos. }
Durante la ejecución, HPVM aplica políticas de programación flexibles para el proceso computacional, implementadas tanto en base a la información sobre el programa (estructura gráfica) como a través de la compilación de nodos de programa individuales para su ejecución en cualquiera de los dispositivos informáticos de destino disponibles en el sistema.
En comparación con la primera versión preliminar, HPVM 1.0 incluye soporte para operaciones de tensor de álgebra lineal, interfaces para Pytorch y Keras y un marco de ajuste de aproximación que selecciona automáticamente las aproximaciones óptimas para ciertas operaciones de tensor y selecciona una configuración para un rendimiento óptimo.
Finalmente, si estás interesado en conocer más al respecto sobre este compilador, puedes consultar los detalles en el siguiente enlace.