HPVM 2.0, um compilador para CPU, GPU, FPGA e aceleradores de hardware, foi publicado

O projeto LLVM anunciou o lançamento do HPVM 2.0 (Heterogeneous Parallel Virtual Machine), um compilador que visa simplificar a programação para sistemas heterogêneos e fornecer ferramentas de geração de código para CPUs, GPUs, FPGAs e aceleradores de hardware específicos de domínio. O código do projeto é distribuído sob a licença Apache 2.0.

A programação para sistemas paralelos heterogêneos é complicada pela presença de componentes no mesmo sistema que usam diferentes modelos para alcançar paralelismo (núcleos de CPU, instruções vetoriais, GPU, etc.), diferentes conjuntos de instruções e diferentes hierarquias de memória. Cada sistema usa sua própria combinação desses componentes. A ideia principal do projeto HPVM é usar uma representação unificada de programas executados em paralelo durante a compilação, que pode ser usada para vários tipos de hardware que suportam computação paralela, incluindo GPUs, instruções vetoriais, processadores multi-core, FPGAs e vários chips aceleradores especializados.

Ao contrário de outros sistemas, o HPVM tentou combinar três capacidades para organizar a computação heterogênea - uma linguagem de programação e representação intermediária independente de hardware (IR), arquitetura de conjunto de instruções virtuais (V-ISA) e agendamento de tempo de execução:

  • A representação intermediária HPVM estende a representação intermediária de instruções LLVM usando um gráfico de fluxo de dados hierárquico para capturar o paralelismo nos níveis de tarefa, dados e pipeline. A representação intermediária do HPVM também inclui instruções vetoriais e memória compartilhada. O principal objetivo do uso de uma representação intermediária é a geração e otimização eficiente de código para sistemas heterogêneos.
  • A Arquitetura de Conjunto de Instruções Virtuais (V-ISA) abstrai recursos de hardware de baixo nível e unifica várias formas de paralelismo e arquiteturas de memória usando apenas um modelo básico de paralelismo – o gráfico de fluxo de dados. V-ISA permite obter portabilidade entre diferentes tipos de equipamentos para computação paralela e permite não perder desempenho ao utilizar diferentes elementos de sistemas heterogêneos. O Virtual ISA também pode ser usado para fornecer código de programa executável universal que pode ser executado usando CPUs, GPUs, FPGAs e vários aceleradores.
  • Políticas de escalonamento flexíveis para o processo computacional são aplicadas em tempo de execução e implementadas tanto com base nas informações sobre o programa (estrutura do gráfico) quanto por meio da compilação de nós individuais do programa para execução em qualquer um dos dispositivos de computação de destino disponíveis no sistema.

Os geradores de código desenvolvidos pelo projeto são capazes de traduzir nós de aplicação definidos usando um ISA virtual para execução usando GPUs NVIDIA (cuDNN e OpenCL), instruções vetoriais Intel AVX, FPGAs e CPUs x86 multi-core. Observa-se que o desempenho dos tradutores HPVM é comparável ao código OpenCL escrito à mão para GPUs e dispositivos de computação vetorial.

Principais inovações do HPVM 2.0:

  • Foi proposto um frontend em linguagem Hetero-C++, que simplifica a paralelização do código da aplicação em C/C++ para compilação em HPVM. Hetero-C++ define extensões para paralelismo em nível de dados e tarefas hierárquicas que mapeiam para gráficos de thread HPVM.
  • Um backend FPGA foi adicionado para fornecer suporte para execução de código em FPGAs Intel. Para organizar a execução, é usado o Intel FPGA SDK para OpenCL.
  • Foi adicionada a estrutura DSE (Design Space Exploration), que inclui otimizações de compilador e mecanismos para identificar gargalos para ajustar automaticamente aplicativos para uma determinada plataforma de hardware. A estrutura contém um modelo de desempenho pronto para FPGAs da Intel e possibilita conectar seus próprios processadores para otimização de quaisquer dispositivos suportados pelo HPVM. As otimizações podem ser aplicadas nos níveis do gráfico de fluxo de dados HPVM e LLVM.
  • Os componentes do LLVM foram atualizados para a versão 13.0.
  • O código foi reorganizado para facilitar a navegação na base de código, nas bibliotecas e nos utilitários.
  • A infra-estrutura de testes foi melhorada e novos testes foram adicionados para vários componentes do HPVM.

Fonte: opennet.ru

Adicionar um comentário