Wydanie PoCL 5.0 z niezależną implementacją standardu OpenCL

Opublikowano wydanie projektu PoCL 5.0 (Portable Computing Language OpenCL), rozwijającego implementację standardu OpenCL, która jest niezależna od producentów akceleratorów graficznych i umożliwia wykorzystanie różnych backendów do wykonywania jąder OpenCL na różnych typach kart graficznych i procesorach centralnych . Kod projektu jest rozpowszechniany na licencji MIT. Obsługuje pracę na platformach X86_64, MIPS32, ARM v7, AMD HSA APU, GPU NVIDIA i różnych wyspecjalizowanych procesorach ASIP (procesor zestawu instrukcji specyficznych dla aplikacji) i TTA (architektura wyzwalana transportem) z architekturą VLIW.

Implementacja kompilatora jądra OpenCL zbudowana jest w oparciu o LLVM, a Clang służy jako frontend dla OpenCL C. Aby zapewnić odpowiednią przenośność i wydajność, kompilator jądra OpenCL może generować funkcje kombinowane, które mogą wykorzystywać różne zasoby sprzętowe do równoległego wykonywania kodu, takie jak VLIW, superskalarne, SIMD, SIMT, wielordzeniowe i wielowątkowe. Obsługiwane są sterowniki ICD (instalowalny sterownik klienta). Istnieją backendy obsługujące działanie poprzez CPU, ASIP (TCE/TTA), GPU oparte na architekturze HSA i GPU NVIDIA (przez libcuda).

W nowej wersji:

  • Zaimplementowano nowy backend „Remote”, zaprojektowany do organizowania przetwarzania rozproszonego poprzez przenoszenie przetwarzania poleceń OpenCL do innych hostów w sieci, na których działa proces pocld w tle.
  • Sterownik CUDA implementuje dodatkowe funkcje i rozszerzenia OpenCL 3.0, takie jak operacje atomowe, zmienne o określonym zasięgu, intel_sub_group_shuffle, intel_sub_group_shuffle_xor, get_sub_group_local_id, sub_group_barrier i sub_group_ballot.
  • Ulepszona obsługa procesorów opartych na architekturze RISC-V. Działanie PoCL zostało przetestowane na płycie Starfive VisionFive 2 załadowanej środowiskiem Ubuntu 23.10 z LLVM 17 i GCC 13.2.
  • Zaimplementowano rozszerzenie cl_ext_float_atomics z obsługą FP32 i FP64.
  • Implementacja rozszerzenia cl_khr_command_buffer została zaktualizowana do wersji 0.9.4.
  • Zaproponowano eksperymentalny backend AlmaIF dla układów FPGA.
  • Usunięto niekompletną obsługę pośredniej reprezentacji shaderów SPIR 1.x/2.0. SPIR-V jest zadeklarowany jako zalecany pośredni język modułu cieniującego.
  • Dodano obsługę Clang/LLVM 17.0. Obsługa Clang/LLVM 10-13 została wycofana.

Źródło: opennet.ru

Dodaj komentarz