Das LLVM-Projekt hat die Version 2.0 des Compilers HPVM (Heterogeneous Parallel Virtual Machine) vorgestellt, die darauf abzielt, das Programmieren für heterogene Systeme zu vereinfachen. Es bietet Werkzeuge zur Codegenerierung für CPU, GPU, FPGA und anwendungsorientierte Hardwarebeschleuniger. Der Code des Projekts wird unter der Apache 2.0 Lizenz veröffentlicht.
Das Programmieren für heterogene parallele Systeme ist aufgrund der unterschiedlichen Komponenten in einem System, die verschiedene Parallelitätsmodelle (CPU-Kerne, Vektorbefehle, GPUs usw.), unterschiedliche Befehlssätze und verschiedene Speicherm hierarchien verwenden, kompliziert. Jede Systemkonfiguration nutzt eine eigene Kombination dieser Komponenten. Die zentrale Idee des HPVM-Projekts besteht darin, ein einheitliches Modell für die Kompilierung parallel ausführbarer Programme zu verwenden, das für verschiedene Arten von Hardware angewendet werden kann, die parallele Berechnungen unterstützen, einschließlich GPUs, Vektorbefehlen, Mehrkernprozessoren, FPGAs und verschiedenen spezialisierten Chipbeschleunigern.
Im Gegensatz zu anderen Systemen versucht HPVM, drei Möglichkeiten zur Organisation heterogener Berechnungen zu kombinieren: eine programmunabhängige und hardwareunabhängige Zwischenrepräsentation (IR), eine virtuelle Befehlssatzarchitektur (V-ISA) und die Laufzeitplanung (Runtime Scheduling).
- Die HPVM-Zwischenrepräsentation erweitert die Zwischenrepräsentation von LLVM durch die Anwendung eines hierarchischen Datenflussgraphen, der es ermöglicht, Parallelität auf Aufgaben-, Daten- und Berechnungspipeline-Ebene zu erfassen. Die HPVM-Zwischenrepräsentation beinhaltet ebenfalls Vektorbefehle und Shared Memory. Das Hauptziel der Anwendung der Zwischenrepräsentation ist die effiziente Codegenerierung und Optimierung für heterogene Systeme.
- Die virtuelle Befehlssatzarchitektur (V-ISA) abstrahiert die low-level Hardwaremerkmale und vereinheitlicht verschiedene Formen der Parallelität sowie Speichermodelle, indem sie lediglich das grundlegende Modell der Parallelitätsbereitstellung – Graphen von Datenströmen – verwendet. V-ISA ermöglicht die Portierbarkeit zwischen verschiedenen Hardwaretypen für parallele Berechnungen und sorgt dafür, dass keine Leistungseinbußen beim Einsatz unterschiedlicher Elemente in heterogenen Systemen entstehen. Darüber hinaus kann die virtuelle ISA auch zur Bereitstellung eines universellen ausführbaren Codes für Programme eingesetzt werden, der auf CPU, GPU, FPGA und verschiedene Beschleuniger ausgeführt werden kann.
- Flexible Planungsrichtlinien für den Rechenprozess werden zur Laufzeit angewendet und basieren sowohl auf Programm-Informationen (Graphstruktur) als auch auf der Kompilierung einzelner Programmknoten zur Ausführung auf einem der in der System verfügbaren Zielrechengeräte.
Die durch das Projekt entwickelten Code-Generatoren sind in der Lage, Anwendungs-Module, die mithilfe einer virtuellen ISA definiert wurden, zur Ausführung auf NVIDIA-GPUs (cuDNN und OpenCL), Intel AVX-Vektorinstruktionen, FPGAs und mehrkernigen x86-CPUs zu übersetzen. Es wird festgestellt, dass die Leistung der HPVM-Übersetzer mit dem handgeschriebenen OpenCL-Code für GPUs und Vektorberechnungsgeräte vergleichbar ist.
Die wichtigsten Neuerungen in HPVM 2.0:
- Eine sprachliche Frontend-Lösung namens Hetero-C++ wird vorgestellt, die das Multithreading von Anwendungen in C/C++ vereinfacht, um sie für HPVM zu kompilieren. Hetero-C++ definiert Erweiterungen für Parallelismus auf Daten- und hierarchischer Aufgabenebene, die in HPVM-Thread-Graphen umgewandelt werden.
- Ein FPGA-Backend wurde hinzugefügt, das die Ausführung von Code auf Intel-FPGAs unterstützt. Für die Durchführung wird das Intel FPGA SDK für OpenCL verwendet.
- Das DSE-Framework (Design Space Exploration) wurde hinzugefügt, das Compiler-Optimierungen und Engpass-Erkennungssysteme für das automatische Tuning von Anwendungen auf einer bestimmten Hardwareplattform umfasst. Das Framework enthält ein vorgefertigtes Leistungsmodell für Intel-FPGAs und ermöglicht die Anbindung eigener Optimierungs-Handler für beliebige Geräte, die von HPVM unterstützt werden. Optimierungen können sowohl auf der Ebene des HPVM-Datenflussgraphen als auch auf der LLVM-Ebene angewendet werden.
- Die LLVM-Komponenten wurden auf Version 13.0 aktualisiert.
- Der Code wurde reorganisiert, um die Navigation durch den Code, die Bibliotheken und Tools zu vereinfachen.
- Die Infrastruktur für Tests wurde verbessert, und es wurden neue Tests für verschiedene Komponenten von HPVM hinzugefügt.
Quelle: opennet.ru
