Opublikowano wydanie projektu PoCL 6.0 (Portable Computing Language OpenCL), rozwijającego implementację standardu OpenCL, niezależnego od producentów akceleratorów graficznych, co umożliwia wykorzystanie różnych backendów do wykonywania rdzeni OpenCL na różnych typach procesorów graficznych i centralnych. Kod projektu jest rozpowszechniany na licencji MIT. Obsługiwane są platformy X86_64, MIPS32, ARM v7, AMD HSA APU, GPU NVIDIA oraz różne wyspecjalizowane procesory ASIP (Application-Specific Instruction-set Processor) i TTA (Transport Triggered Architecture) z architekturą VLIW.
Implementacja kompilatora jąder OpenCL oparta jest na LLVM, a jako frontend dla OpenCL C wykorzystuje Clang. Aby zapewnić odpowiednią przenośność i wydajność, kompilator jąder OpenCL może generować funkcje kombinowane, które mogą wykorzystać różne zasoby sprzętowe do równoległego wykonywania kodu, takie jak VLIW, superskalarny, SIMD, SIMT, wielordzeniowy i wielowątkowy. Obsługa sterowników ICD jest dostępna.
(Installable Client Driver). Dostępne są backendy do zapewnienia działania przez CPU, ASIP (TCE/TTA), GPU w architekturze HSA oraz GPU NVIDIA (przez libcuda).
W nowej wersji:
- Dodano wsparcie dla Clang/LLVM 18.0, zakończono wsparcie dla LLVM 10, 11, 12 i 13.
- Zrealizowano nowy backend cpu-tbb, który wykorzystuje bibliotekę OneTBB rozwijaną przez firmę Intel do równoległego przetwarzania operacji i planowania wykonania zadań.
- W backendzie cpu, który umożliwia wykonanie rdzeni OpenCL na CPU, dodano wsparcie dla standardu programowania równoległego OpenMP, dodano metodę clGetDeviceAndHostTimer(), a także wprowadzono eksperymentalne rozszerzenia cl_pocl_svm_rect, cl_pocl_command_buffer_svm i cl_pocl_command_buffer_host_buffer.
- W backendzie «Remote», przeznaczonym do organizowania rozproszonych obliczeń przez delegowanie przetwarzania komend OpenCL na inne hosty w sieci, na których działa działający w tle proces pocld, dodano wsparcie dla CG SVM (Coarse-Grain Shared Virtual Memory), możliwość dostępu do backendu przy pomocy protokołu komunikacyjnego Vsock oraz wsparcie dla kompilacji i wiązania programów przy pomocy funkcji clCompileProgram() i clLinkProgram().
- W backendzie LevelZero, wykorzystującym API Level Zero, pozwolono na tworzenie buforów o wielkości większej niż 4 GB, a także wprowadzono optymalizacje procesów synchronizacji.
- W backendzie CUDA wprowadzono operacje sub_group_shuffle oraz sub_group_shuffle_xor, a także zwiększono limit CL_DEVICE_MAX_MEM_ALLOC_SIZE.
Źródło: opennet.ru
