Karol Herbst z Red Hatu, přispěvatelka do Mesa, ovladače Nouveau a open source OpenCL stacku, navrhla ovladač cluda pro zahrnutí do Mesa. Implementuje Gallium API nad CUDA API poskytovaným proprietárním ovladačem NVIDIA. Gallium se v Mesa používá k abstraktnímu vývoji ovladačů a implementuje standardní API ovladačů, která nejsou specifická pro jednotlivá hardwarová zařízení. cluda implementuje výpočetní rozhraní dostatečná k implementaci specifikace OpenCL nad CUDA.
Očekává se, že cluda vyřeší problémy s používáním OpenCL přes proprietární ovladač od NVIDIA. Použití dalšího frameworku umožňuje implementaci chybějících rozšíření OpenCL v stacku NVIDIA na základě proprietárního ovladače. cluda využívá pouze knihovnu libcuda.so, která je součástí ovladačů GPU od NVIDIA a není vázána na běhové prostředí CUDA. Ve své současné podobě implementace OpenCL založená na cluda podporuje operace s pamětí a umožňuje spouštění výpočetních jader.
Implementace OpenCL založená na knihovnách cluda a rusticl podporuje následující rozšíření OpenCL, která nejsou přítomna v implementaci NVIDIA:
- cl_xr_extended_bit_ops
- cl_xr_integer_tečka_součin
- cl_xr_fp16
- cl_khr_suggested_local_work_size
- cl_khr_subgroup_extended_types
- hlasovací lístek podskupiny cl_khr
- cl_khr_subgroup_clustered_reduce
- cl_khr_subgroup_non_uniform_arithmetic
- cl_khr_subgroup_non_uniform_vote
- cl_xr_subgroup_rotate
- cl_xr_subgroup_shuffle
- cl_khr_subgroup_shuffle_relative
- cl_khr_il_program (Ano, to znamená podporu SPIR-V)
- cl_xr_spirv_linkonce_odr
- cl_khr_spirv_no_integer_wrap_decoration
- cl_xr_spirv_queries
- cl_xr_očekávat_předpokládat
- cl_ext_immutable_memory_objects
Při měření výkonu v benchmarku LuxMark 3.1 dosáhla implementace OpenCL založená na Mesa, cluda a rusticl 57 702 bodů, zatímco implementace založená na stacku NVIDIA dosáhla 64 009 bodů. Pokles výkonu je vysvětlen režijními náklady na převod mezilehlé reprezentace Mesa NIR na CUDA PTX (Parallel Thread Execution). Mezi potenciální optimalizace, které by mohly snížit rozdíl ve výkonu, patří aktivnější využití vektorizace a JIT kompilace.

Zdroj: opennet.ru
