NVIDIA CUDA можна використовувати на прискорювачах Intel, але поки лише в Geekbench (доп. 2)
NVIDIA CUDA можна використовувати на прискорювачах Intel, але поки лише в Geekbench
Розробники, що стоять за ZLUDA, описують це як замінник заміни CUDA на системах з графічними процесорами Intel із сімейства Skylake та пізніше. Останній випуск підтримує як клієнти Windows, так і Linux із процесорами Core 6-го покоління (або вище) з інтегрованою графікою. На думку розробників, ZLUDA повинен досягти майже рідної продуктивності, але набір функцій обмежений. В даний час працює лише Geekbench, і потенційним користувачам попереджають поки що не покладатися на нього для будь-якого програмного забезпечення виробничого рівня.
Використання ZLUDA в Windows здається досить простим. Ми взяли останній випуск зі сторінки ZLUDA GitHub і витягли його в Geekbench. Архів, який ми завантажили, містить "обгортку" для будь-якої програми з підтримкою CUDA для запуску з включеною CUDA DLL. Потім просто запустіть обгортку з командного рядка з додатком як аргументом. Наприклад, якщо ми перейшли до C: \ Program Files (x86) \ Geekbench 5 \ у PowerShell, а потім виконали цю команду:
zluda_with - geekbench5 - обчислювальна CUDA
Geekbench намагається загорітися. На нашому ноутбуці Tiger Lake додаток виходить із помилкою в бібліотеках CUDA. Зараз це не дуже радісно для нас у Windows, але як тільки ми отримаємо трохи вільного часу, ми сподіваємось зробити це більш серйозно. У Linux розробники ZLUDA отримали еталони для Core i5-8700K, набравши 6333 за допомогою CUDA, використовуючи вбудовану графіку UHD 630, порівняно з 6482 в OpenCL. Це невеликий спад у продуктивності, але загальне число приховує деякі цікаві індивідуальні результати тестів.GitHub від ZLUDA також демонструє окремі оцінки обчислень Geekbench та порівняння OpenCL з цим експериментальним впровадженням CUDA. Незважаючи на те, що кілька тестів були значно повільнішими у ZLUDA, тест Stereo Matching був приблизно на 50% швидшим, використовуючи ZLUDA, ніж на OpenCL. На перший погляд це здається досить багатообіцяючим, але файл ReadMe натякає, що апаратна підтримка певних функцій відсутня на всіх сучасних інтегрованих графічних процесорах Intel. Це може означати, що деякі функції в ZLUDA будуть просто повільнішими, ніж у OpenCL, поки розробники ZLUDA не виробить спосіб пришвидшити процес. Це попередження також наочне, що те, що різні версії тесту або тесту видають однакові результати, не означає, що тест робить це однаково для кожного API.
Очевидно, що для ZLUDA, який переживає лише другий великий випуск, ще дуже ранній час, і йому ще належить пройти довгий шлях. Однак це буде цікавий проект для перегляду. Відеокарти Intel DG1 вже випущені для виробників, і, схоже, більш надійний DG2 вже не за горами . Хоча інтегрована графіка є цікавим доказом концепції, немає сумнівів, що дискретна графіка Intel - це те, що розробники ZLUDA мають на увазі, коли бібліотека дозріває.
***
Метою версії 2 було виправити наскрізне виконання GeekBench та покращити підтримку Windows:
- Зараз підтримується кілька нових функцій на стороні хоста (наприклад, cuModuleLoadDataEx)
- На стороні ядра було виправлено кілька помилок (наприклад, threadIdx / blockIdx тепер обробляється правильно)
- Незначне вдосконалення згенерованого коду забезпечило кращу продуктивність вводу-виводу під час читання / запису векторних об'єктів. Це покращило продуктивність на кілька відсоткових пунктів у деяких тестах GeekBench
- ZLUDA тепер постачає власний інжектор (with_zluda.exe), що має значно полегшити роботу ZLUDA в Windows
- Крім того, ми отримали можливість легко створювати сліди виконання ядра CUDA, роблячи набагато простішим надання нових робочих навантажень
- ZLUDA тепер має CI, який створює двійкові файли на кожен запит на витягування та коміт
Особлива подяка @ take-cheeze , @nilsmartel та @ritschwumm за внесок у цей випуск
***
Божевільний
Божевільний
ZLUDA - це заміна для CUDA на графічному процесорі Intel. ZLUDA дозволяє запускати немодифіковані програми CUDA, використовуючи графічні процесори Intel з майже рідною продуктивністю (докладніше нижче). Він працює з сучасними інтегрованими графічними процесорами Intel UHD і буде працювати з майбутніми графічними процесорами Intel Xe
Продуктивність
Продуктивність ZLUDA вимірювали за допомогою GeekBench 5.2.3 на Intel UHD 630.
Одне вимірювання було виконано за допомогою OpenCL, а інше - за допомогою CUDA з графічним процесором Intel, що маскується як (порівняно повільний) графічний процесор NVIDIA за допомогою ZLUDA. Обидва вимірювання використовують однаковий графічний процесор.
Продуктивність нижче нормалізується на продуктивність OpenCL. 110% означає, що реалізована ZLUDA CUDA на 10% швидша на Intel UHD 630.
Детальний журнал ZLUDA на Geekbench.com
Детальний журнал OpenCL на Geekbench.com
Загалом у цьому наборі тестів швидше приблизно на 4% на ZLUDA.
Пояснення результатів
- Чому ZLUDA швидший у стереозвуці, розмитті Гауса та глибині різкості?
Це не було точно визначено в тій чи іншій мірі, але, швидше за все, це комбінація речей:- ZLUDA використовує рівень 0, який загалом є API більш високого рівня, більш високої продуктивності
- Прив'язуючи до попереднього пункту, наразі ZLUDA не підтримує асинхронне виконання. Це дає нам несправедливу перевагу в такому тесті, як GeekBench. GeekBench використовує виключно синхронні API CUDA
- Існує набір інструкцій графічного процесора, які доступні як на апаратному забезпеченні NVIDIA, так і на апаратному забезпеченні Intel, але не доступні через OpenCL. Ми порівнюємо оптимізований для графічного процесора NVIDIA код із більш загальним кодом OpenCL. Це щасливий збіг обставин (і заслуга основного графічного компілятора Intel), що цей код також добре працює на графічному процесорі Intel
- Чому OpenCL швидше в Canny and Horizon Detection?
Автори тестів CUDA використовували функції CUDAatomicInc
іatomicDec
які мають пряму апаратну підтримку на картах NVIDIA, але не підтримують апаратну підтримку на картах Intel. Їх слід емулювати в програмному забезпеченні, що обмежує продуктивність - Чому деякі контрольні показники не виконуються?
Сама ZLUDA підтримує всі операції, що використовуються в невдалих тестах. З-поміж обмежених налагоджень, які було зроблено дотепер, проблема, швидше за все, десь в іншому місці. Стек компілятора Intel GPU дуже спроможний, коли справа доходить до компіляції OpenCL, C для Metal та DPC ++. Це ще не дуже добре у компіляції ZLUDA. ZLUDA видає шаблони коду, яких раніше не бачив стек компілятора Intel GPU, і вражає деякі рідко використовувані (або не використовувані раніше) шляхи коду в компіляторі.
Поточний стан невдалих тестів GeekBench відстежується тут
Деталі
- Чи є ZLUDA заміною CUDA?
Так, але деякі програми використовують CUDA таким чином, що роблять його несумісним із ZLUDA. - Який статус проекту
Цей проект є доказом концепції. Про єдине, що працює зараз, це Geekbench (і навіть не повністю). Це дивовижно глючить і неповно. Не слід на це покладатися ні на що серйозне - Це проект Intel? Це проект NVIDIA?
Ні, це приватний проект - Яка продуктивність?
Продуктивність може бути наближена до роботи аналогічно написаного коду OpenCL (див. Результати GeekBench у попередньому розділі). Графічні процесори NVIDIA та графічні процесори Intel мають різну архітектуру та набір функцій. Отже, певні функції NVIDIA повинні імітуватись у ZLUDA із покаранням продуктивності. Крім того, продуктивність ZLUDA завжди буде нижчою, ніж продуктивність коду, спеціально оптимізованого для графічних процесорів Intel - Чим він відрізняється від набору інструментів сумісності AMD HIP або Intel DPC ++?
Обидва вони переносять набори інструментів, які вимагають зусиль програміста для перенесення програм на відповідний API. З ZLUDA існуючі додатки "просто працюють" на графічному процесорі Intel (якщо вам пощастило, і ZLUDA підтримує конкретну підмножину CUDA) - Які графічні процесори Intel підтримуються?
Intel Gen9 та новіші (Skylake та новіші), які підтримуються Intel Level 0 - Чи підтримує ZLUDA графічні процесори AMD?
В даний час, звичайно, немає, але це може бути технічно можливо
Використання
Попередження : це дуже неповний доказ концепції. Можливо, це не буде працювати з вашим додатком. Наразі ZLUDA працює лише з програмами, які використовують API драйверів CUDA. Збірки Linux також працюють із програмами, які використовують статично пов'язаний API виконання CUDA
Windows
У вас повинні бути встановлені найновіші драйвери графічного процесора.
Скопіюйте nvcuda.dll
в каталог програми (каталог, де знаходиться файл .exe) і запустіть його нормально
Linux
Потрібна найновіша версія обчислювальної роботи . На момент написання статті рекомендується версія 20.45.18403. Розпакуйте десь архів і запустіть програму так:
LD_LIBRARY_PATH=<PATH_TO_THE_DIRECTORY_WITH_ZLUDA_PROVIDED_LIBCUDA> <YOUR_APPLICATION>
Будівництво
У вас повинна бути встановлена відносно остання версія Rust, тоді ви просто робите:
cargo build
в головному каталозі проекту
Ліцензія
Це програмне забезпечення має подвійну ліцензію за ліцензією Apache 2.0 або ліцензією MIT. Див ЛІЦЕНЗІЇ-APACHE або ЛІЦЕНЗІЇ-MIT для отримання докладної інформації
Коментарі
Дописати коментар
Олег Мічман в X: «Donations and support for media resources, bloggers, projects, and individuals. https://t.co/HPKsNRd4Uo https://t.co/R6NXVPK62M» / X
https://twitter.com/olukawy/status/1703876551505309973