ΠΡΠΎΠ΅ΠΊΡ ZLUDA ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠ» ΠΎΡΠΊΡΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ CUDA Π΄Π»Ρ GPU AMD, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ CUDA-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ, Π±Π»ΠΈΠ·ΠΊΠΎΠΉ ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ Π±Π΅Π· ΠΏΡΠΎΡΠ»ΠΎΠ΅ΠΊ. ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌΠΈ CUDA-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠΎΠ±ΡΠ°Π½Π½ΡΠΌΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° CUDA Π΄Π»Ρ GPU NVIDIA. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ²Π΅ΡΡ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ AMD ΡΡΠ΅ΠΊΠ° ROCm ΠΈ runtime HIP (Heterogeneous-computing Interface for Portability). ΠΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠ·ΡΠΊΠ΅ Rust ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΡΠΌΠΈ MIT ΠΈ Apache 2.0. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ° Π² Linux ΠΈ Windows.
De laag voor het organiseren van CUDA-werk op systemen met AMD GPU's is de afgelopen twee jaar ontwikkeld, maar het project heeft een langere geschiedenis en is oorspronkelijk gemaakt om CUDA-werk op Intel GPU's te garanderen. De verandering in het GPU-ondersteuningsbeleid wordt verklaard door het feit dat de ZLUDA-ontwikkelaar aanvankelijk een werknemer van Intel was, maar in 2021 beschouwde dit bedrijf het bieden van de mogelijkheid om CUDA-applicaties op Intel GPU's uit te voeren niet van zakelijk belang en versnelde het niet. de ontwikkeling van het initiatief.
Begin 2022 verliet de ontwikkelaar Intel en werd door AMD gecontracteerd om een ββlaag voor CUDA-compatibiliteit te ontwikkelen. Tijdens de ontwikkeling vroeg AMD om geen reclame te maken voor AMD's interesse in het ZLUDA-project en om geen toezeggingen te doen aan de openbare ZLUDA-repository. Twee jaar later besloot AMD dat het draaien van CUDA-applicaties op AMD GPU's niet interessant was voor het bedrijfsleven, waardoor de ontwikkelaar volgens de voorwaarden van het contract zijn werk kon ontdekken. Sinds GPU-fabrikanten zijn gestopt met de financiering van het project, hangt het lot ervan nu af van de belangstelling van de gemeenschap en de ontvangst van voorstellen voor samenwerking van andere bedrijven. Zonder externe steun zal het project zich alleen kunnen ontwikkelen in richtingen die voor de auteur persoonlijk interessant zijn, zoals DLSS (Deep Learning Super Sampling).
In de huidige vorm wordt het kwaliteitsniveau van de implementatie beoordeeld als een alfaversie. ZLUDA kan echter al worden gebruikt om veel CUDA-applicaties uit te voeren, waaronder Geekbench, 3DF Zephyr, Blender, Reality Capture, LAMMPS, NAMD, waifu2x, OpenFOAM en Arnold. Biedt minimale ondersteuning voor cuDNN-, cuBLAS-, cuSPARSE-, cuFFT-, NCCL- en NVML-primitieven en -bibliotheken.
De eerste lancering van CUDA-applicaties met ZLUDA vindt plaats met merkbare vertragingen vanwege het feit dat ZLUDA GPU-code compileert. Er is geen dergelijke vertraging bij volgende runs, omdat de gecompileerde code in de cache wordt opgeslagen. Bij het uitvoeren van gecompileerde code zijn de prestaties bijna native. Bij het uitvoeren van Geekbench op een AMD Radeon 6800 XT GPU presteerde de ZLUDA-versie van de CUDA-benchmarksuite merkbaar beter dan de OpenCL-versie.

Ondersteuning voor de officiΓ«le CUDA Driver API en het reverse-engineered gedeelte van de ongedocumenteerde CUDA API wordt in ZLUDA geΓ―mplementeerd door functieaanroepen te vervangen door vergelijkbare functies die worden aangeboden in de HIP-runtime, die in veel opzichten vergelijkbaar is met CUDA. De functie cuDeviceGetAttribute() wordt bijvoorbeeld vervangen door hipDeviceGetAttribute(). Compatibiliteit met NVIDIA-bibliotheken zoals NVML, cuBLAS en cuSPARSE wordt op een vergelijkbare manier gegarandeerd - voor dergelijke bibliotheken biedt ZLUDA vertaalbibliotheken met dezelfde naam en dezelfde reeks functies, gebouwd als add-ons op vergelijkbare AMD-bibliotheken.
GPU-applicatiecode die is gecompileerd in de PTX-representatie (Parallel Thread Execution) wordt eerst door een speciale compiler vertaald naar de LLVM IR-tussenrepresentatie, op basis waarvan binaire code voor AMD GPU's wordt gegenereerd.

Bron: opennet.ru
