Pubblicato HPVM 2.0, compilatore per CPU, GPU, FPGA e acceleratori hardware

Il progetto LLVM ha annunciato il rilascio di HPVM 2.0 (Heterogeneous Parallel Virtual Machine), un compilatore volto a semplificare la programmazione per sistemi eterogenei e fornire strumenti di generazione di codice per CPU, GPU, FPGA e acceleratori hardware specifici del dominio. Il codice del progetto Γ¨ distribuito con la licenza Apache 2.0.

La programmazione per sistemi paralleli eterogenei Γ¨ complicata dalla presenza di componenti nello stesso sistema che utilizzano modelli diversi per ottenere il parallelismo (core della CPU, istruzioni vettoriali, GPU, ecc.), diversi set di istruzioni e diverse gerarchie di memoria. Ogni sistema utilizza la propria combinazione di questi componenti. L'idea principale del progetto HPVM Γ¨ quella di utilizzare una rappresentazione unificata di programmi eseguiti in parallelo durante la compilazione, che puΓ² essere utilizzata per 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 cercato di combinare tre funzionalitΓ  per organizzare l'elaborazione eterogenea: un linguaggio di programmazione e una rappresentazione intermedia (IR) indipendente dall'hardware, un'architettura del set di istruzioni virtuali (V-ISA) e una pianificazione del runtime:

  • La rappresentazione intermedia HPVM estende la rappresentazione intermedia LLVM delle istruzioni utilizzando 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.
  • Virtual Instruction Set Architecture (V-ISA) astrae le caratteristiche hardware di basso livello e unifica varie forme di parallelismo e architetture di memoria utilizzando solo un modello di parallelismo di base: il grafico del flusso di dati. V-ISA consente di ottenere la portabilitΓ  tra diversi tipi di apparecchiature per il 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.
  • Politiche di pianificazione flessibili per il processo computazionale vengono applicate in fase di esecuzione e sono implementate sia sulla base delle informazioni sul programma (struttura grafica) sia attraverso la compilazione di singoli nodi di programma per l'esecuzione su uno qualsiasi dei dispositivi informatici di destinazione disponibili nel sistema.

I generatori di codice sviluppati dal progetto sono 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, FPGA e CPU multi-core x86. Va notato che le prestazioni dei traduttori HPVM sono paragonabili al codice OpenCL scritto a mano per GPU e dispositivi di elaborazione vettoriale.

Principali innovazioni di HPVM 2.0:

  • È stato proposto un frontend in linguaggio Hetero-C++, che semplifica la parallelizzazione del codice dell'applicazione in C/C++ per la compilazione in HPVM. Hetero-C++ definisce estensioni per il parallelismo a livello di dati e attivitΓ  gerarchiche che si associano ai grafici dei thread HPVM.
  • È stato aggiunto un backend FPGA per fornire supporto per l'esecuzione del codice sugli FPGA Intel. Per organizzare l'esecuzione, viene utilizzato l'SDK Intel FPGA per OpenCL.
  • È stato aggiunto il framework DSE (Design Space Exploration), che include ottimizzazioni del compilatore e meccanismi per identificare i colli di bottiglia per ottimizzare automaticamente le applicazioni per una determinata piattaforma hardware. Il framework contiene un modello di prestazioni giΓ  pronto per FPGA di Intel e consente di collegare i propri processori per l'ottimizzazione per qualsiasi dispositivo supportato da HPVM. Le ottimizzazioni possono essere applicate sia a livello di grafico del flusso di dati HPVM che LLVM.
  • I componenti LLVM sono stati aggiornati alla versione 13.0.
  • Il codice Γ¨ stato riorganizzato per facilitare la navigazione nella codebase, nelle librerie e nelle utilitΓ .
  • L'infrastruttura di test Γ¨ stata migliorata, sono stati aggiunti nuovi test per vari componenti HPVM.

Fonte: opennet.ru

Aggiungi un commento