ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ инструмСнтарий ZLUDA, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ CUDA-прилоТСния Π½Π° GPU AMD

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ 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.

Π‘Π»ΠΎΠΉ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ CUDA Π½Π° систСмах с GPU AMD разрабатывался послСдниС Π΄Π²Π° Π³ΠΎΠ΄Π°, Π½ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ давнюю ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ создавался для обСспСчСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ CUDA Π½Π° GPU Intel. ИзмСнСниС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ GPU ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ZLUDA являлся сотрудником Intel, Π½ΠΎ Π² 2021 Π³ΠΎΠ΄Ρƒ данная компания посчитала прСдоставлСниС возмоТности запуска CUDA-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° GPU Intel Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ интСрСса для бизнСса ΠΈ Π½Π΅ стала Ρ„ΠΎΡ€ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρ‹.

Π’ Π½Π°Ρ‡Π°Π»Π΅ 2022 Π³ΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ уволился ΠΈΠ· Intel ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ» ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ AMD Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ слоя для совмСстимости с CUDA. Компания AMD попросила Π²ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ Π°Ρ„ΠΈΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ интСрСс AMD ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ ZLUDA ΠΈ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ZLUDA. Бпустя Π΄Π²Π° Π³ΠΎΠ΄Π° компания AMD Ρ€Π΅ΡˆΠΈΠ»Π°, Ρ‡Ρ‚ΠΎ запуск CUDA-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° GPU AMD Π½Π΅ прСдставляСт интСрСса для бизнСса, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΎΡ‚Ρ€Ρ‹Ρ‚ΡŒ свои Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ GPU пСрСстали Ρ„ΠΈΠ½Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π΅Π³ΠΎ ΡΡƒΠ΄ΡŒΠ±Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ зависит ΠΎΡ‚ интСрСса сообщСства ΠΈ поступлСния ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎ сотрудничСствС ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ. Π‘Π΅Π· внСшнСй ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² направлСниях, интСрСсных Π»ΠΈΡ‡Π½ΠΎ Π°Π²Ρ‚ΠΎΡ€Ρƒ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ DLSS (Deep Learning Super Sampling).

Π’ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ качСства Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ оцСниваСтся ΠΊΠ°ΠΊ Π°Π»ΡŒΡ„Π°-вСрсия. ΠŸΡ€ΠΈ этом ZLUDA ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для выполнСния ΠΌΠ½ΠΎΠ³ΠΈΡ… CUDA-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Geekbench, 3DF Zephyr, Blender, Reality Capture, LAMMPS, NAMD, waifu2x, OpenFOAM ΠΈ Arnold. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° минимальная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ cuDNN, cuBLAS, cuSPARSE, cuFFT, NCCL ΠΈ NVML.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ запуск CUDA-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ZLUDA производится с Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ, ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ZLUDA выполняСт ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ GPU-ΠΊΠΎΠ΄Π°. Π’ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… запусках подобная Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° отсутствуСт, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ скомпилированный ΠΊΠΎΠ΄ сохраняСтся Π² кэшС. Π’ процСссС выполнСния скомпилированного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π»ΠΈΠ·ΠΊΠ° ΠΊ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Geekbench Π½Π° GPU AMD Radeon 6800 XT Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ тСстового Π½Π°Π±ΠΎΡ€Π° для CUDA, выполняСмый ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ZLUDA, ΠΏΠΎΠΊΠ°Π·Π°Π» Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‡Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° Π±Π°Π·Π΅ OpenCL.

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ инструмСнтарий ZLUDA, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ CUDA-прилоТСния Π½Π° GPU AMD

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ CUDA Driver API ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΈΠ½ΠΆΠΈΠ½ΠΈΡ€ΠΈΠ½Π³Π° части Π½Π΅Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ API CUDA Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² ZLUDA Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΌΠ΅Π½Ρƒ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, прСдоставляСмыС Π² HIP runtime, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° CUDA. НапримСр, функция cuDeviceGetAttribute() замСняСтся Π½Π° hipDeviceGetAttribute(). ΠŸΠΎΡ…ΠΎΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ обСспСчиваСтся ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ NVIDIA, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ NVML, cuBLAS ΠΈ cuSPARSE, — для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π² ZLUDA ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, построСнныС Π² Π²ΠΈΠ΄Π΅ надстроСк Π½Π°Π΄ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ AMD.

GPU-ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, скомпилированный Π² прСдставлСниС PTX (Parallel Thread Execution), транслируСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ компилятором Π²Π½Π°Ρ‡Π°Π»Π΅ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС LLVM IR, Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ гСнСрируСтся Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для GPU AMD.

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ инструмСнтарий ZLUDA, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ CUDA-прилоТСния Π½Π° GPU AMD


Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru