O projeto LLVM introduziu o HPVM 1.0, um compilador para CPU, GPU, FPGA e aceleradores

Os desenvolvedores do projeto LLVM publicaram o lançamento do compilador HPVM 1.0 (Heterogeneous Parallel Virtual Machine), que visa simplificar a programação para sistemas heterogêneos e fornecer ferramentas para geração de código para CPUs, GPUs, FPGAs e aceleradores de hardware específicos de domínio (suporte para FGPAs e aceleradores não foram incluídos na versão 1.0). O código do projeto é distribuído sob a licença Apache 2.0.

A ideia principal do HPVM é fornecer uma representação unificada de programas executáveis ​​em paralelo durante a compilação, que pode ser usada para execução usando 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: representação intermediária independente de linguagem e hardware, arquitetura de conjunto de instruções virtuais (ISA) e agendamento de tempo de execução.

A representação intermediária independente de alvo (IR) do HPVM baseia-se na representação de instrução intermediária LLVM 9.0 e a estende com um gráfico de fluxo de dados hierárquico para capturar o paralelismo em nível de tarefas, 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 (ISA) permite a portabilidade entre diferentes tipos de hardware de 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.

No atual estágio de desenvolvimento, o HPVM oferece geradores de código capazes de traduzir nós de aplicativos definidos usando um ISA virtual para execução usando GPUs NVIDIA (cuDNN e OpenCL), instruções vetoriais Intel AVX e CPUs x86 multi-core. Em tempo de execução, o HPVM aplica políticas flexíveis de agendamento de processos computacionais, implementadas tanto com base nas informações do programa (estrutura gráfica) quanto por meio da compilação de nós de programa individuais para execução em qualquer um dos dispositivos de computação de destino disponíveis no sistema.

Nota-se que o uso do HPVM pode alcançar um aumento significativo na produtividade. O desempenho dos tradutores HPVM é comparável ao código OpenCL escrito à mão para GPUs e dispositivos de computação vetorial.

Em comparação com a primeira versão de visualização, o HPVM 1.0 inclui suporte para operações de tensor de álgebra linear, frontends para Pytorch e Keras, aproximações de operadores de convolução e uma estrutura de ajuste de aproximação que seleciona automaticamente aproximações ideais para operações de tensor específicas e seleciona a configuração que fornece desempenho ideal.

Fonte: opennet.ru

Adicionar um comentário