Il progetto LLVM ha introdotto HPVM 1.0, un compilatore per CPU, GPU, FPGA e acceleratori

Gli sviluppatori del progetto LLVM hanno pubblicato il rilascio del compilatore HPVM 1.0 (Heterogeneous Parallel Virtual Machine), volto a semplificare la programmazione per sistemi eterogenei e fornire strumenti per generare codice per CPU, GPU, FPGA e acceleratori hardware specifici del dominio (supporto per FGPA e acceleratori non erano inclusi nella versione 1.0). Il codice del progetto è distribuito con la licenza Apache 2.0.

L'idea principale di HPVM è fornire una rappresentazione unificata di programmi eseguibili in parallelo durante la compilazione, che possono essere utilizzati per l'esecuzione utilizzando vari tipi di hardware che supportano il calcolo parallelo, tra cui GPU, istruzioni vettoriali, processori multi-core, FPGA e vari chip acceleratori specializzati. A differenza di altri sistemi, HPVM ha tentato di combinare tre funzionalità per organizzare l'elaborazione eterogenea: rappresentazione intermedia indipendente dal linguaggio e dall'hardware, architettura del set di istruzioni virtuali (ISA) e pianificazione del runtime.

La rappresentazione intermedia (IR) indipendente dal target di HPVM si basa sulla rappresentazione delle istruzioni intermedie LLVM 9.0 e la estende con un grafico del flusso di dati gerarchico per acquisire il parallelismo a livello di attività, dati e pipeline. La rappresentazione intermedia HPVM include anche istruzioni vettoriali e memoria condivisa. Lo scopo principale dell'utilizzo di una rappresentazione intermedia è la generazione e l'ottimizzazione efficiente del codice per sistemi eterogenei.

L'architettura del set di istruzioni virtuali (ISA) consente la portabilità tra diversi tipi di hardware di calcolo parallelo e consente di non perdere prestazioni quando si utilizzano diversi elementi di sistemi eterogenei. Virtual ISA può essere utilizzato anche per fornire codice di programma eseguibile universale che può essere eseguito utilizzando CPU, GPU, FPGA e vari acceleratori.

Nell'attuale fase di sviluppo, HPVM offre generatori di codice in grado di tradurre i nodi applicativi definiti utilizzando un ISA virtuale per l'esecuzione utilizzando GPU NVIDIA (cuDNN e OpenCL), istruzioni vettoriali Intel AVX e CPU multi-core x86. In fase di esecuzione, HPVM applica politiche flessibili di pianificazione dei processi computazionali, implementate sia in base alle informazioni del programma (struttura grafica) sia attraverso la compilazione di singoli nodi di programma per l'esecuzione su qualsiasi dispositivo di elaborazione di destinazione disponibile nel sistema.

Si noti che l'uso di HPVM può ottenere un aumento significativo della produttività. Le prestazioni dei traduttori HPVM sono paragonabili al codice OpenCL scritto a mano per GPU e dispositivi di elaborazione vettoriale.

Rispetto alla prima versione di anteprima, HPVM 1.0 include il supporto per operazioni tensoriali di algebra lineare, frontend per Pytorch e Keras, approssimazioni degli operatori di convoluzione e un framework di ottimizzazione delle approssimazioni che seleziona automaticamente le approssimazioni ottimali per specifiche operazioni tensoriali e seleziona la configurazione che fornisce prestazioni ottimali.

Fonte: opennet.ru

Aggiungi un commento