PoCL 1.6, samodzielna implementacja standardu OpenCL

Właśnie ukazała się nowa wersja projektu PoCL 1.6 (Portable Computing Language OpenCL) . Najważniejsze cechy wersji 1.6 to kompatybilność z Clang/LLVM 11.0, a także prace nad poprawą wydajności i funkcji CUDA, poprawiona kompatybilność z PowerPC oraz ulepszone możliwości debugowania OpenCL.

Dla osób niezaznajomionych z PoCL: jest to przenośna, oparta na licencji MIT (open source) implementacja standardu OpenCL (wersja 1.2 z kilkoma funkcjami kompatybilnymi z wersją 2.0). Poza tym, że jest to wysoce przenośna, wielourządzeniowa (prawdziwie heterogeniczna) implementacja OpenCL o otwartym kodzie źródłowym , głównym celem tego projektu jest poprawa interoperacyjności różnych urządzeń kompatybilnych z OpenCL poprzez integrację ich w jedną, centralnie zarządzaną platformę.

Ponadto jednym z kluczowych długoterminowych celów jest poprawa przenośności wydajności programów OpenCL na typach urządzeń, które wykorzystują techniki wykonywania i kompilacji.

Kompilator jądra OpenCL jest oparty na LLVM, a Clang jest używany jako interfejs dla OpenCL C. Aby zapewnić odpowiednią wydajność i przenośność, kompilator jądra OpenCL może generować połączone funkcje, które mogą korzystać z różnych zasobów sprzętowych w celu zrównoleglenia wykonywania kodu. , takie jak VLIW, superscalar, SIMD, SIMT, wielordzeniowe i wielowątkowe. Dostępna jest obsługa sterowników ICD (Installable Client Driver). Istnieją backendy, które zapewniają pracę przez CPU, ASIP (TCE / TTA), GPU oparty na architekturze HSA i GPU NVIDIA (CUDA).

Główne nowe funkcje PoCL 1.6

Ta nowa wersja PoCL 1.6 podkreśla możliwość skompilowania tej implementacji ze sterownikami urządzeń włączonymi w czasie kompilacji, a także dostępność urządzenia zostanie zweryfikowana podczas uruchamiania (wcześniej systemy, na których zbudowano i uruchomiono PoCL powinni mieć taką samą obsługę kontrolera). Zaimplementowano możliwość użycia menedżera pakietów Conda do dystrybucji pakietów binarnych PoCL z obsługą CUDA dla systemów Linux-x86_64 i Linux-ppc64le.

Kolejną wyróżniającą się zmianą jest obsługa LLVM 11 wraz z rozszerzonymi możliwościami debugowania kodu OpenCL podczas korzystania z kontrolera CPU.

Dodatkowo należy zauważyć, że przeprowadzono optymalizację wydajnościową backendu CUDA, co pozwoliło znacznie przyspieszyć operacje związane z wykorzystaniem pamięci lokalnej (FFT, GEMM).

Testy porównawcze wykorzystujące testy SHOC (które są teraz stale testowane, pokazują, że te optymalizacje dały znacznie lepszą wydajność, szczególnie w przypadku testów porównawczych obejmujących pamięć lokalną, taką jak FFT i GEMM, w porównaniu poprzednie odniesienie. PoCL obecnie często osiąga konkurencyjną wydajność dzięki zastrzeżonemu sterownikowi OpenCL firmy Nvidia). Z zadowoleniem przyjmujemy wkład w identyfikację i eliminację pierwotnych przyczyn pozostałych obszarów problemowych. Z zadowoleniem przyjmujemy również wkład w poprawę zakresu funkcji dla standardów OpenCL 1.2 / 3.0.

  • Wydajność PoCL w wielu testach jest teraz zbliżona do zastrzeżonego sterownika OpenCL firmy NVIDIA.
  • Dodano parametr kompilacji HARDENING_ENABLE, aby włączyć opcje kompilatora w celu wygenerowania bezpieczniejszego libpocl.so kosztem obniżenia wydajności.
  • Zwrócono obsługę systemów PowerPC 8/9, dla których poziom implementacji OpenCL przy korzystaniu z urządzeń pthread i CUDA odpowiada poziomowi CUDA w systemach x86_64.
  • Zmieniono ABI dla jąder CUDA, które używają lokalnych bloków __. Po uaktualnieniu użytkownicy muszą wyczyścić pamięć podręczną pocl.
  • Usunięto obsługę opcji budowania SINGLE_LLVM_LIB, zamiast używać STATIC_LLVM i llvm-config do definiowania bibliotek do powiązania.

Na koniec, jeśli chcesz dowiedzieć się więcej o tej nowej wersji, możesz sprawdzić szczegóły w oryginalnym ogłoszeniu.

Osoby zainteresowane uzyskaniem dalszych informacji na temat tej implementacji mogą odwiedzić jej oficjalną stronę internetową , gdzie znajdą dokumentację i pliki do pobrania.

Kod projektu jest rozpowszechniany na licencji MIT, a praca jest obsługiwana na platformach X86_64, MIPS32, ARM v7, AMD HSA APU oraz różnych specjalistycznych procesorach TTA o architekturze VLIW.


Dodaj jako preferowane źródło w Google