HPVM, um compilador baseado em LLVM para CPU, GPU, FPGA e aceleradores

Os desenvolvedores do projeto LLVM lançado lançando recentemente o compilador Heterogeneous Parallel Virtual Machine (HPVM) 1.0, Que visa simplifica a programação para sistemas heterogêneos e fornece ferramentas de geração de código para CPU, GPU, FPGA e aceleradores de hardware específico de domínio (suporte para FGPA e aceleradores não foi incluído na versão 1.0).

A ideia principal atrás do HPVM é compilar uma representação unificada de programas executáveis ​​simultaneamente que pode ser usado para rodar em uma variedade de hardware paralelo, incluindo GPUs, instruções vetoriais, processadores multi-core, FPGAs e vários chips aceleradores especializados.

A programação para sistemas paralelos heterogêneos é complicada pela presença em um sistema de componentes (núcleos de CPU, instruções vetoriais, GPUs, etc.) que usam modelos diferentes para atingir paralelismo, conjuntos de instruções diferentes e hierarquias de memória diferentes, e cada sistema tem uma combinação de tais componentes estão mudando.

O Illinois LLVM Compiler Research Group tem o prazer de anunciar o lançamento de código aberto do HPVM (versão 1.0). HPVM é uma estrutura de compilador de reorientação voltada para CPUs, GPUs e aceleradores (esta versão não inclui suporte para aceleradores) [1]. O HPVM usa um compilador IR independente de destino que estende o compilador LLVM 9.0.0 IR com uma representação de fluxo de dados hierárquica explícita que captura tarefas, dados e paralelismo de pipeline.

Esta versão é uma adição importante à nossa primeira versão (versão 0.5), que adiciona suporte para operações de tensor de álgebra linear, interfaces Pytorch e Keras, aproximações para operadores de convolução e uma estrutura eficiente e flexível para ajuste de aproximação. 

Deve-se notar que o uso de HPVM pode alcançar ganhos de desempenho significativos como eO desempenho de saída dos tradutores HPVM é comparável ao do código OpenCL escrito à mão para dispositivos de computação vetorial e GPU. Ao contrário de outros sistemas, o HPVM tentou combinar três possibilidades para organizar a computação heterogênea: representação intermediária independente de linguagem e hardware, arquitetura de conjunto de instruções virtuais (V-ISA) e programação em tempo de execução.

A representação intermediária independente (IR) do sistema alvo e a linguagem de programação usada no HPVM é baseada na representação intermediária das instruções do LLVM 9.0 e o estende com um gráfico de fluxo de dados hierárquico para cobrir o paralelismo no nível de tarefa, dados e pipelines computacionais.

O intermediário HPVM também inclui instruções vetoriais e memória compartilhada. O principal objetivo do uso de representação intermediária é a geração e otimização eficiente de códigos para sistemas heterogêneos.

A Virtual Instruction Set Architecture (V-ISA) abstrai recursos de hardware de baixo nível e unifica várias formas de paralelismo e arquiteturas de memória usando apenas o modelo básico de simultaneidade, o gráfico de fluxo de dados. V-ISA permite alcançar portabilidade entre diferentes tipos de equipamentos de computação paralela e não perde desempenho ao usar 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 CPU, GPU, FPGA e vários aceleradores.

No estágio atual de desenvolvimento, HPVM oferece geradores de código capazes de traduzir os nós de aplicação definidos pelo ISA virtual para execução usando GPUs NVIDIA (cuDNN e OpenCL), instruções vetoriais Intel AVX e CPUs x86 de vários núcleos. }

Durante a execução, o HPVM aplica políticas de agendamento flexíveis para o processo computacional, implementadas tanto com base nas informações sobre o programa (estrutura gráfica) quanto através da compilação de nós individuais do programa para execução em qualquer um dos dispositivos computacionais de destino disponíveis no sistema.

Em comparação com a primeira versão de visualização, HPVM 1.0 inclui suporte para operações de tensor de álgebra linear, interfaces para Pytorch e Keras e uma estrutura de ajuste de aproximação que seleciona automaticamente as aproximações ideais para certas operações de tensor e seleciona uma configuração para desempenho ideal.

Finalmente, se você estiver interessado em saber mais sobre este compilador, Você pode verificar os detalhes no link a seguir.


Seja o primeiro a comentar

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.