Publicado HPVM 2.0, compilador para CPU, GPU, FPGA y aceleradores de hardware

El proyecto LLVM anunció el lanzamiento de HPVM 2.0 (Máquina virtual paralela heterogénea), un compilador destinado a simplificar la programación para sistemas heterogéneos y proporcionar herramientas de generación de código para CPU, GPU, FPGA y aceleradores de hardware de dominios específicos. El código del proyecto se distribuye bajo la licencia Apache 2.0.

La programación para sistemas paralelos heterogéneos se complica por la presencia de componentes en el mismo sistema que utilizan 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 utilizar una representación unificada de programas ejecutados en paralelo al compilar, que se puede utilizar para varios tipos de hardware que admitan la 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 capacidades para organizar la computación heterogénea: un lenguaje de programación y una representación intermedia (IR) independiente del hardware, una arquitectura de conjunto de instrucciones virtuales (V-ISA) y programación en tiempo de ejecución:

  • La representación intermedia de HPVM amplía la representación intermedia de instrucciones de LLVM mediante el uso de un gráfico de flujo de datos jerárquico para capturar el paralelismo en los niveles de tarea, datos y canalización. La representación intermedia de HPVM también incluye instrucciones vectoriales y memoria compartida. El objetivo principal de utilizar 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 características de hardware de bajo nivel y unifica varias formas de paralelismo y arquitecturas de memoria utilizando solo un modelo de paralelismo básico: el gráfico de flujo de datos. V-ISA permite lograr portabilidad entre diferentes tipos de equipos para computación paralela y permite no perder rendimiento al utilizar diferentes elementos de sistemas heterogéneos. Virtual ISA también se puede utilizar para entregar código de programa ejecutable universal que puede ejecutarse mediante CPU, GPU, FPGA y varios aceleradores.
  • Las políticas de programación flexibles para el proceso computacional se aplican en tiempo de ejecución y se implementan tanto en base a información sobre el programa (estructura gráfica) como mediante 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.

Los generadores de código desarrollados por el proyecto son capaces de traducir nodos de aplicaciones definidos mediante una ISA virtual para su ejecución utilizando GPU NVIDIA (cuDNN y OpenCL), instrucciones vectoriales Intel AVX, FPGA y CPU x86 multinúcleo. Cabe señalar que el rendimiento de los traductores HPVM es comparable al código OpenCL escrito a mano para GPU y dispositivos de computación vectorial.

Innovaciones clave de HPVM 2.0:

  • Se ha propuesto una interfaz en lenguaje Hetero-C++, que simplifica la paralelización del código de la aplicación en C/C++ para su compilación en HPVM. Hetero-C++ define extensiones para el paralelismo a nivel de datos y tareas jerárquicas que se asignan a gráficos de subprocesos de HPVM.
  • Se ha agregado un backend FPGA para brindar soporte para la ejecución de código en FPGA Intel. Para organizar la ejecución, se utiliza el SDK Intel FPGA para OpenCL.
  • Se ha agregado el marco DSE (Design Space Exploration), que incluye optimizaciones del compilador y mecanismos para identificar 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 permite conectar sus propios procesadores para optimizarlos para cualquier dispositivo compatible con HPVM. Las optimizaciones se pueden aplicar en los niveles del gráfico de flujo de datos de HPVM y LLVM.
  • Los componentes de LLVM se han actualizado a la versión 13.0.
  • El código se ha reorganizado para facilitar la navegación por el código base, las bibliotecas y las utilidades.
  • Se ha mejorado la infraestructura de pruebas y se han agregado nuevas pruebas para varios componentes de HPVM.

Fuente: opennet.ru

Añadir un comentario