W ramach projektu LLVM wprowadzono HPVM 1.0, kompilator dla procesora, procesora graficznego, FPGA i akceleratorów

Twórcy projektu LLVM opublikowali wydanie kompilatora HPVM 1.0 (Heterogeneous Parallel Virtual Machine), którego celem jest uproszczenie programowania dla systemów heterogenicznych i dostarczenie narzędzi do generowania kodu dla procesorów, procesorów graficznych, FPGA i akceleratorów sprzętowych specyficznych dla domeny (obsługa FGPA i akceleratory nie zostały uwzględnione w wersji 1.0). Kod projektu rozpowszechniany jest na licencji Apache 2.0.

Główną ideą HPVM jest zapewnienie podczas kompilacji ujednoliconej reprezentacji programów wykonywalnych równolegle, które można wykorzystać do wykonania przy użyciu różnego rodzaju sprzętu obsługującego obliczenia równoległe, w tym procesorów graficznych, instrukcji wektorowych, procesorów wielordzeniowych, układów FPGA i różne wyspecjalizowane chipy akceleracyjne. W przeciwieństwie do innych systemów, HPVM próbował połączyć trzy możliwości organizacji obliczeń heterogenicznych: niezależną od języka i sprzętu reprezentację pośrednią, architekturę wirtualnego zestawu instrukcji (ISA) i planowanie czasu wykonywania.

Niezależna od celu pośrednia reprezentacja (IR) HPVM opiera się na reprezentacji instrukcji pośrednich LLVM 9.0 i rozszerza ją o hierarchiczny wykres przepływu danych w celu uchwycenia równoległości na poziomie zadania, danych i potoku. 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.

Architektura wirtualnego zestawu instrukcji (ISA) pozwala na przenośność pomiędzy różnymi typami sprzętu do obliczeń równoległych i pozwala nie stracić wydajności podczas korzystania z różnych elementów systemów heterogenicznych. Wirtualnego ISA można również używać do dostarczania uniwersalnego kodu programu wykonywalnego, który może działać przy użyciu procesorów, procesorów graficznych, układów FPGA i różnych akceleratorów.

Na obecnym etapie rozwoju HPVM oferuje generatory kodu zdolne do translacji węzłów aplikacji zdefiniowanych przy użyciu wirtualnego ISA do wykonania przy użyciu procesorów graficznych NVIDIA (cuDNN i OpenCL), instrukcji wektorowych Intel AVX i wielordzeniowych procesorów x86. W czasie wykonywania HPVM stosuje elastyczną politykę planowania procesów obliczeniowych, realizowaną zarówno w oparciu o informacje o programie (struktura wykresu), jak i poprzez kompilację poszczególnych węzłów programu do wykonania na dowolnym docelowym urządzeniu obliczeniowym dostępnym w systemie.

Należy zauważyć, że zastosowanie HPVM może osiągnąć znaczny wzrost produktywności. Wydajność tłumaczy HPVM jest porównywalna z ręcznie pisanym kodem OpenCL dla procesorów graficznych i urządzeń do obliczeń wektorowych.

W porównaniu z pierwszą wersją zapoznawczą HPVM 1.0 zawiera obsługę operacji tensora algebry liniowej, nakładki dla Pytorch i Keras, przybliżenia operatora splotu oraz strukturę dostrajania aproksymacji, która automatycznie wybiera optymalne przybliżenia dla określonych operacji tensora i wybiera konfigurację zapewniającą optymalną wydajność.

Źródło: opennet.ru

Dodaj komentarz