Опубліковано інструментарій ZLUDA, що дозволяє запускати CUDA-програми на GPU AMD

Проект ZLUDA підготував відкриту реалізацію технології CUDA для GPU AMD, що дозволяє виконувати немодифіковані CUDA-додатки з продуктивністю, близькою до продуктивності програм, що виконуються без прошарків. Опублікований інструментарій забезпечує бінарну сумісність з існуючими програмами CUDA, зібраними за допомогою компілятора CUDA для GPU NVIDIA. Реалізація працює поверх стека ROCm і runtime HIP (Heterogeneous-computing Interface for Portability), що розвивається компанією AMD. Код проекту написаний мовою 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

Додати коментар або відгук