HPVM 2.0, compiler voor CPU, GPU, FPGA en hardwareversnellers gepubliceerd

Het LLVM-project kondigde de release aan van HPVM 2.0 (Heterogeneous Parallel Virtual Machine), een compiler die gericht is op het vereenvoudigen van het programmeren voor heterogene systemen en het bieden van tools voor het genereren van code voor CPU's, GPU's, FPGA's en domeinspecifieke hardwareversnellers. De projectcode wordt gedistribueerd onder de Apache 2.0-licentie.

Programmeren voor heterogene parallelle systemen wordt gecompliceerd door de aanwezigheid van componenten in hetzelfde systeem die verschillende modellen gebruiken om parallellisme te bereiken (CPU-kernen, vectorinstructies, GPU, enz.), verschillende instructiesets en verschillende geheugenhiërarchieën. Elk systeem gebruikt zijn eigen combinatie van deze componenten. Het hoofdidee van het HPVM-project is om bij het compileren een uniforme representatie van parallel uitgevoerde programma's te gebruiken, die kan worden gebruikt voor verschillende soorten hardware die parallel computing ondersteunt, waaronder GPU's, vectorinstructies, multi-coreprocessors, FPGA's en verschillende gespecialiseerde acceleratorchips.

In tegenstelling tot andere systemen probeerde HPVM drie mogelijkheden te combineren voor het organiseren van heterogeen computergebruik: een programmeertaal en hardware-onafhankelijke tussenliggende representatie (IR), virtuele instructiesetarchitectuur (V-ISA) en runtime-planning:

  • De tussenliggende HPVM-representatie breidt de tussenliggende LLVM-representatie van instructies uit door gebruik te maken van een hiërarchische gegevensstroomgrafiek om parallellisme op taak-, gegevens- en pijplijnniveau vast te leggen. De tussenliggende HPVM-representatie omvat ook vectorinstructies en gedeeld geheugen. Het belangrijkste doel van het gebruik van een tussenrepresentatie is het efficiënt genereren en optimaliseren van code voor heterogene systemen.
  • Virtual Instruction Set Architecture (V-ISA) abstraheert hardwarefuncties op laag niveau en verenigt verschillende vormen van parallellisme en geheugenarchitecturen met behulp van slechts een fundamenteel parallellismemodel: de datastroomgrafiek. Met V-ISA kunt u draagbaarheid realiseren tussen verschillende soorten apparatuur voor parallel computergebruik en kunt u geen prestatieverlies lijden bij het gebruik van verschillende elementen van heterogene systemen. Virtuele ISA kan ook worden gebruikt om universele uitvoerbare programmacode te leveren die kan worden uitgevoerd met behulp van CPU's, GPU's, FPGA's en verschillende versnellers.
  • Flexibel planningsbeleid voor het rekenproces wordt toegepast tijdens runtime en wordt geïmplementeerd op basis van informatie over het programma (grafiekstructuur) en via de compilatie van individuele programmaknooppunten voor uitvoering op elk van de doelcomputerapparaten die in het systeem beschikbaar zijn.

De door het project ontwikkelde codegeneratoren zijn in staat applicatieknooppunten te vertalen die zijn gedefinieerd met behulp van een virtuele ISA voor uitvoering met behulp van NVIDIA GPU's (cuDNN en OpenCL), Intel AVX vectorinstructies, FPGA's en multi-core x86 CPU's. Opgemerkt wordt dat de prestaties van de HPVM-vertalers vergelijkbaar zijn met die van handgeschreven OpenCL-code voor GPU's en vectorcomputerapparatuur.

Belangrijkste innovaties van HPVM 2.0:

  • Er is een frontend in Hetero-C++-taal voorgesteld, die de parallellisatie van applicatiecode in C/C++ voor compilatie in HPVM vereenvoudigt. Hetero-C++ definieert uitbreidingen voor parallellisme op gegevensniveau en hiërarchische taken die worden toegewezen aan HPVM-threadgrafieken.
  • Er is een FPGA-backend toegevoegd om ondersteuning te bieden voor code-uitvoering op Intel FPGA's. Om de uitvoering te organiseren, wordt de Intel FPGA SDK voor OpenCL gebruikt.
  • Het DSE-framework (Design Space Exploration) is toegevoegd, dat compileroptimalisaties en mechanismen omvat voor het identificeren van knelpunten voor het automatisch afstemmen van applicaties op een bepaald hardwareplatform. Het framework bevat een kant-en-klaar prestatiemodel voor FPGA's van Intel en maakt het mogelijk om eigen processors aan te sluiten voor optimalisatie voor alle apparaten die door HPVM worden ondersteund. Optimalisaties kunnen worden toegepast op zowel het HPVM- als het LLVM-gegevensstroomgrafiekniveau.
  • LLVM-componenten zijn bijgewerkt naar versie 13.0.
  • De code is gereorganiseerd om het gemakkelijker te maken om door de codebasis, bibliotheken en hulpprogramma's te navigeren.
  • De testinfrastructuur is verbeterd, er zijn nieuwe tests toegevoegd voor diverse HPVM-componenten.

Bron: opennet.ru

Voeg een reactie