HPVM 2.0, kompilator för CPU, GPU, FPGA och hårdvaruacceleratorer publicerad

LLVM-projektet tillkännagav lanseringen av HPVM 2.0 (Heterogeneous Parallel Virtual Machine), en kompilator som syftar till att förenkla programmering för heterogena system och tillhandahålla kodgenereringsverktyg för CPU:er, GPU:er, FPGA:er och domänspecifika hårdvaruacceleratorer. Projektkoden distribueras under Apache 2.0-licensen.

Programmering för heterogena parallella system kompliceras av närvaron av komponenter i samma system som använder olika modeller för att uppnå parallellitet (CPU-kärnor, vektorinstruktioner, GPU, etc.), olika instruktionsuppsättningar och olika minneshierarkier. Varje system använder sin egen kombination av dessa komponenter. Huvudidén med HPVM-projektet är att använda en enhetlig representation av parallellkörda program vid kompilering, som kan användas för olika typer av hårdvara som stöder parallell beräkning, inklusive GPU:er, vektorinstruktioner, flerkärniga processorer, FPGA:er och olika specialiserade acceleratorchips.

Till skillnad från andra system försökte HPVM kombinera tre funktioner för att organisera heterogen datoranvändning - ett programmeringsspråk och hårdvaruoberoende mellanrepresentation (IR), virtuell instruktionsuppsättningsarkitektur (V-ISA) och körtidsschemaläggning:

  • HPVM-mellanrepresentationen utökar LLVM-mellanrepresentationen av instruktioner genom att använda en hierarkisk dataflödesgraf för att fånga parallellism på uppgifts-, data- och pipelinenivåer. HPVM-mellanrepresentationen inkluderar också vektorinstruktioner och delat minne. Huvudsyftet med att använda en mellanrepresentation är effektiv kodgenerering och optimering för heterogena system.
  • Virtual Instruction Set Architecture (V-ISA) abstraherar hårdvarufunktioner på låg nivå och förenar olika former av parallellism och minnesarkitekturer genom att endast använda en grundläggande parallellismmodell – dataflödesgrafen. V-ISA låter dig uppnå portabilitet mellan olika typer av utrustning för parallell beräkning och gör det möjligt att inte tappa prestanda när du använder olika delar av heterogena system. Virtual ISA kan också användas för att leverera universell körbar programkod som kan köras med CPU:er, GPU:er, FPGA:er och olika acceleratorer.
  • Flexibla schemaläggningspolicyer för beräkningsprocessen tillämpas under körning och implementeras både baserat på information om programmet (grafstruktur) och genom sammanställningen av individuella programnoder för exekvering på någon av målberäkningsenheterna som finns tillgängliga i systemet.

Kodgeneratorerna som utvecklats av projektet kan översätta applikationsnoder definierade med hjälp av en virtuell ISA för exekvering med NVIDIA GPU:er (cuDNN och OpenCL), Intel AVX vektorinstruktioner, FPGA:er och x86-processorer med flera kärnor. Det noteras att HPVM-översättarnas prestanda är jämförbar med handskriven OpenCL-kod för GPU:er och vektorberäkningsenheter.

Viktiga innovationer i HPVM 2.0:

  • Ett Hetero-C++-språkgränssnitt har föreslagits, vilket förenklar parallelliseringen av applikationskod i C/C++ för kompilering i HPVM. Hetero-C++ definierar tillägg för parallellitet på datanivå och hierarkiska uppgifter som mappas till HPVM-trådsdiagram.
  • En FPGA-backend har lagts till för att ge stöd för kodexekvering på Intel FPGA:er. För att organisera körningen används Intel FPGA SDK för OpenCL.
  • Ramverket DSE (Design Space Exploration) har lagts till, vilket inkluderar kompilatoroptimeringar och mekanismer för att identifiera flaskhalsar för att automatiskt ställa in applikationer för en given hårdvaruplattform. Ramverket innehåller en färdig prestandamodell för FPGA:er från Intel och gör det möjligt att ansluta dina egna processorer för optimering för alla enheter som stöds av HPVM. Optimering kan tillämpas på både HPVM- och LLVM-dataflödesdiagramnivåerna.
  • LLVM-komponenter har uppdaterats till version 13.0.
  • Koden har omorganiserats för att göra det lättare att navigera i kodbasen, biblioteken och verktygen.
  • Testinfrastrukturen har förbättrats, nya tester har lagts till för olika HPVM-komponenter.

Källa: opennet.ru

Lägg en kommentar