Publicouse HPVM 2.0, un compilador para CPU, GPU, FPGA e aceleradores de hardware

O proxecto LLVM anunciou o lanzamento de HPVM 2.0 (Heterogeneous Parallel Virtual Machine), un compilador destinado a simplificar a programación para sistemas heteroxéneos e proporcionar ferramentas de xeración de código para CPU, GPU, FPGA e aceleradores de hardware específicos de dominio. O código do proxecto distribúese baixo a licenza Apache 2.0.

A programación para sistemas paralelos heteroxéneos complícase pola presenza de compoñentes nun mesmo sistema que utilizan diferentes modelos para conseguir o paralelismo (núcleos de CPU, instrucións vectoriais, GPU, etc.), diferentes conxuntos de instrucións e diferentes xerarquías de memoria. Cada sistema usa a súa propia combinación destes compoñentes. A idea principal do proxecto HPVM é utilizar unha representación unificada de programas executados en paralelo ao compilar, que se pode usar para varios tipos de hardware que admiten computación paralela, incluíndo GPU, instrucións vectoriais, procesadores multinúcleo, FPGA e varios chips aceleradores especializados.

A diferenza doutros sistemas, HPVM intentou combinar tres capacidades para organizar a computación heteroxénea: unha linguaxe de programación e unha representación intermedia (IR) independente do hardware, unha arquitectura de conxunto de instrucións virtuais (V-ISA) e unha programación de tempo de execución:

  • A representación intermedia de HPVM estende a representación intermedia de instrucións LLVM mediante o uso dun gráfico de fluxo de datos xerárquico para capturar o paralelismo nos niveis de tarefa, datos e canalización. A representación intermedia de HPVM tamén inclúe instrucións vectoriais e memoria compartida. O propósito principal do uso dunha representación intermedia é a xeración e optimización de código eficiente para sistemas heteroxéneos.
  • Virtual Instruction Set Architecture (V-ISA) abstrae características de hardware de baixo nivel e unifica varias formas de paralelismo e arquitecturas de memoria utilizando só un modelo de paralelismo básico: o gráfico de fluxo de datos. V-ISA permítelle acadar a portabilidade entre distintos tipos de equipos para a computación paralela e permite non perder rendemento ao utilizar distintos elementos de sistemas heteroxéneos. Virtual ISA tamén se pode usar para entregar código de programa executable universal que se pode executar usando CPU, GPU, FPGA e varios aceleradores.
  • As políticas de programación flexible para o proceso computacional aplícanse en tempo de execución e impléntanse tanto en base á información sobre o programa (estrutura gráfica) como a través da compilación de nodos individuais do programa para a súa execución en calquera dos dispositivos informáticos de destino dispoñibles no sistema.

Os xeradores de código desenvolvidos polo proxecto son capaces de traducir nodos de aplicacións definidos mediante un ISA virtual para a súa execución mediante GPU NVIDIA (cuDNN e OpenCL), instrucións vectoriais Intel AVX, FPGA e CPU x86 multinúcleo. Nótase que o rendemento dos tradutores HPVM é comparable ao código OpenCL escrito a man para GPU e dispositivos de computación vectorial.

Innovacións clave de HPVM 2.0:

  • Propúxose unha interface en linguaxe Hetero-C++, que simplifica a paralelización do código da aplicación en C/C++ para a compilación en HPVM. Hetero-C++ define extensións para o paralelismo a nivel de datos e as tarefas xerárquicas que se asignan aos gráficos de fíos de HPVM.
  • Engadiuse un backend FPGA para proporcionar soporte para a execución de código en FPGA Intel. Para organizar a execución, utilízase o Intel FPGA SDK para OpenCL.
  • Engadiuse o marco DSE (Design Space Exploration), que inclúe optimizacións do compilador e mecanismos para identificar os pescozos de botella para axustar automaticamente as aplicacións para unha determinada plataforma de hardware. O marco contén un modelo de rendemento preparado para FPGA de Intel e fai posible conectar os seus propios procesadores para optimizalos para calquera dispositivo compatible con HPVM. As optimizacións pódense aplicar nos niveis de gráficos de fluxo de datos HPVM e LLVM.
  • Actualizáronse os compoñentes de LLVM á versión 13.0.
  • O código reorganizouse para facilitar a navegación pola base de código, as bibliotecas e as utilidades.
  • Mellorouse a infraestrutura de probas, engadíronse novas probas para varios compoñentes de HPVM.

Fonte: opennet.ru

Engadir un comentario