HPVM 2.0, kompilator dla CPU, GPU, FPGA i akceleratorów sprzętowych opublikowany

W ramach projektu LLVM udostępniono kompilator HPVM 2.0 (Heterogeneous Parallel Virtual Machine), którego celem jest uproszczenie programowania systemów heterogenicznych oraz zapewnienie narzędzi do generowania kodu dla procesorów, układów GPU, układów FPGA i specyficznych dla domeny akceleratorów sprzętowych. Kod projektu jest dystrybuowany na licencji Apache 2.0.

Programowanie dla heterogenicznych systemów równoległych jest skomplikowane ze względu na obecność w jednym systemie komponentów, które wykorzystują różne modele osiągania równoległości (rdzenie procesora, instrukcje wektorowe, procesory graficzne itp.), różne zestawy instrukcji i różne hierarchie pamięci. Każdy system wykorzystuje własną kombinację tych komponentów. Główną ideą projektu HPVM jest wykorzystanie w kompilacji ujednoliconej reprezentacji programów równoległych, które mogą być używane dla różnych typów sprzętu obsługującego obliczenia równoległe, w tym GPU, instrukcji wektorowych, procesorów wielordzeniowych, układów FPGA i różnych specjalistycznych układy akceleracyjne.

W przeciwieństwie do innych systemów, HPVM próbował połączyć trzy możliwości organizacji przetwarzania heterogenicznego - reprezentację pośrednią (IR), architekturę wirtualnego zestawu instrukcji (V-ISA) oraz planowanie czasu wykonywania, niezależnie od języka programowania i sprzętu:

  • Reprezentacja pośrednia HPVM rozszerza pośrednią reprezentację instrukcji LLVM za pomocą hierarchicznego wykresu przepływu danych w celu uchwycenia równoległości na poziomie zadań, danych i potoków obliczeniowych. Pośrednia reprezentacja HPVM obejmuje również instrukcje wektorowe i pamięć współdzieloną. Głównym celem stosowania reprezentacji pośredniej jest wydajne generowanie i optymalizacja kodu dla systemów heterogenicznych.
  • Wirtualna architektura zestawu instrukcji (V-ISA) stanowi abstrakcję sprzętu niskiego poziomu i ujednolica różne formy równoległości i architektur pamięci przy użyciu wyłącznie podstawowego modelu współbieżności, wykresu przepływu danych. V-ISA pozwala osiągnąć przenośność między różnymi typami sprzętu do obliczeń równoległych i sprawia, że ​​nie traci się wydajności podczas korzystania z różnych elementów systemów heterogenicznych. Wirtualnego ISA można również używać do dostarczania ogólnego kodu wykonywalnego programu, który może działać na procesorach, procesorach graficznych, układach FPGA i różnych akceleratorach.
  • Elastyczne zasady szeregowania procesów obliczeniowych stosowane są w czasie wykonywania i realizowane zarówno na podstawie informacji o programie (struktura grafu), jak i poprzez kompilację poszczególnych węzłów programu do wykonania na dowolnym docelowym urządzeniu obliczeniowym dostępnym w systemie.

Generatory kodu opracowane w ramach projektu są w stanie tłumaczyć węzły aplikacji zdefiniowane za pomocą wirtualnego ISA do wykonywania przy użyciu procesorów graficznych NVIDIA (cuDNN i OpenCL), instrukcji wektorowych Intel AVX, układów FPGA i wielordzeniowych procesorów x86. Należy zauważyć, że wydajność wyników translatorów HPVM jest porównywalna z ręcznie pisanym kodem OpenCL dla GPU i urządzeń do obliczeń wektorowych.

Główne innowacje HPVM 2.0:

  • Zaproponowano nakładkę języka Hetero-C++, która upraszcza przetwarzanie równoległe kodu aplikacji C/C++ w celu kompilacji w HPVM. Hetero-C++ definiuje rozszerzenia równoległości na poziomie danych i zadań hierarchicznych, które są mapowane na wykresy wątków HPVM.
  • Dodano backend FPGA w celu obsługi wykonywania kodu na Intel FPGA. Aby zorganizować wykonanie, używany jest pakiet Intel FPGA SDK dla OpenCL.
  • Dodany został framework DSE (Design Space Exploration), który obejmuje optymalizacje kompilatora oraz mechanizmy wykrywania wąskich gardeł w celu automatycznego dostrajania aplikacji do danej platformy sprzętowej. Framework zawiera gotowy model wydajności dla FPGA firmy Intel i umożliwia podłączenie własnych procesorów w celu optymalizacji dla dowolnego urządzenia obsługiwanego przez HPVM. Optymalizacje można zastosować zarówno na poziomie wykresu przepływu danych HPVM, jak i na poziomie LLVM.
  • Komponenty LLVM zaktualizowane do wersji 13.0.
  • Kod został zreorganizowany, aby ułatwić poruszanie się po bazie kodu, bibliotekach i narzędziach.
  • Poprawiono infrastrukturę do testowania, dodano nowe testy dla różnych komponentów HPVM.

Źródło: opennet.ru

Dodaj komentarz