Il progetto LLVM ha presentato la versione 2.0 del compilatore HPVM (Heterogeneous Parallel Virtual Machine), progettato per semplificare la programmazione per sistemi eterogenei e fornire strumenti per la generazione di codice per CPU, GPU, FPGA e acceleratori hardware specifici. Il codice del progetto è distribuito sotto licenza Apache 2.0.
La programmazione per sistemi paralleli eterogenei è complicata dalla presenza, all'interno di un unico sistema, di componenti che utilizzano modelli diversi per ottenere il parallelismo (nuclei CPU, istruzioni vettoriali, GPU, ecc.), set di istruzioni diversi e diverse gerarchie di memoria. Ogni sistema utilizza una propria combinazione di tali componenti. L'idea principale del progetto HPVM è l'uso di una rappresentazione unificata delle applicazioni eseguite in parallelo durante la compilazione, applicabile a vari tipi di hardware che supportano il parallelismo nel calcolo, inclusi GPU, istruzioni vettoriali, processori multicore, FPGA e vari chip acceleratori specializzati.
A differenza di altri sistemi, HPVM ha cercato di unire tre possibilità per l'organizzazione di calcoli eterogenei: una rappresentazione intermedia (IR) indipendente dal linguaggio di programmazione e dall'hardware, un'architettura virtuale del set di istruzioni (V-ISA) e pianificazione durante l'esecuzione.
- La rappresentazione intermedia di HPVM amplia la rappresentazione intermedia delle istruzioni LLVM attraverso l'uso di un grafo gerarchico dei flussi di dati, permettendo di coprire il parallelismo a livello di attività, dati e pipeline di calcolo. La rappresentazione intermedia di HPVM include anche istruzioni vettoriali e memoria condivisa. L'obiettivo principale della rappresentazione intermedia è la generazione di codice efficiente e ottimizzazioni per sistemi eterogenei.
- L'architettura virtuale del set di istruzioni (V-ISA) astrae le caratteristiche a basso livello dell'hardware e unifica le diverse forme di parallelismo e architettura della memoria, utilizzando solo il modello di base per la gestione del parallelismo: il grafo dei flussi di dati. V-ISA consente di ottenere portabilità tra diversi tipi di hardware per il calcolo parallelo, garantendo al contempo di non perdere prestazioni utilizzando diversi elementi di sistemi eterogenei. La V-ISA può anche essere utilizzata per fornire codice eseguibile universale delle applicazioni, che può essere eseguito utilizzando CPU, GPU, FPGA e vari acceleratori.
- Politiche flessibili di pianificazione del processo di calcolo vengono applicate durante l'esecuzione e sono implementate sia sulla base delle informazioni sul programma (struttura del grafo), sia attraverso la compilazione di singoli nodi del programma per l'esecuzione su uno qualsiasi dei dispositivi di calcolo target disponibili nel sistema.
I generatori di codice sviluppati dal progetto sono in grado di tradurre i nodi delle applicazioni definiti tramite l'ISA virtuale, per l'esecuzione utilizzando GPU NVIDIA (cuDNN e OpenCL), istruzioni vettoriali Intel AVX, FPGA e CPU x86 multi-core. È da notare che le prestazioni dei traduttori HPVM sono comparabili a quelle del codice OpenCL scritto a mano per GPU e dispositivi di calcolo vettoriale.
Principali novità di HPVM 2.0:
- È stato proposto il frontend linguistico Hetero-C++, che semplifica la parallelizzazione del codice per applicazioni scritte in C/C++ da compilare in HPVM. Hetero-C++ definisce estensioni per la parallelizzazione a livello di dati e compiti gerarchici, che vengono convertiti in grafi di flusso HPVM.
- È stato aggiunto un backend FPGA che offre supporto per l'esecuzione di codice su FPGA prodotti da Intel. Per organizzare l'esecuzione, si utilizza Intel FPGA SDK per OpenCL.
- È stato aggiunto il framework DSE (Design Space Exploration), che include ottimizzazioni del compilatore e meccanismi di rilevamento dei colli di bottiglia per la sintonizzazione automatica delle applicazioni per una specifica piattaforma hardware. Il framework contiene un modello di prestazioni predefinito per FPGA Intel e consente di connettere gestori personalizzati per ottimizzare qualsiasi dispositivo supportato da HPVM. Le ottimizzazioni possono essere applicate sia a livello di grafo dei flussi di dati HPVM che a livello di LLVM.
- I componenti LLVM sono stati aggiornati alla versione 13.0.
- È stata effettuata una riorganizzazione del codice, mirata a semplificare la navigazione attraverso la base di codice, le librerie e gli strumenti.
- È stata migliorata l'infrastruttura per il testing, aggiungendo nuovi test per vari componenti di HPVM.
Fonte: opennet.ru
