Чому Julia?
Julia має першколасну підтримку програмування відеокарт.
На момент створення цих уроків, вже існує підтримка програмування відеокарт Nvidia (CUDA.jl), AMD (AMDGPU.jl), Apple (Metal.jl), Intel (oneAPI.jl).
Інші мови програмування не мають таких гнучких можливостей та час не резиновий. Наприклад, у випадку з Python можна було б розглянути PyTorch але це б обмежило нас функціоналом який вже існує в ньому. Для написання низькорівневих програм (ядер / kernels), які працюватимуть на відеокарті нам довелося б спускатися на рівень нижче та використовувати С/C++. В результаті багато часу було б витрачено на створення "інфраструктури" навколо коду.
В даній серії уроків буде розглянуто програмування Nvidia та AMD відеокарт.
Встановлення
Cкачати Julia тут.
Запустити Julia REPL:
<path-to-julia>/bin/julia --threads=auto
Додати відповідний пакет для програмування відеокарти:
Nvidia: ] add CUDA
AMD: ] add AMDGPU
Замітка: символ
]
переводить вас в режим пакетного менеджера Julia, де відбувається встановлення/видалення/оновлення пакетів. Для повернення назад в режим REPL, необхідно натиснутиBackspace
.
У випадку з Nvidia, пакет CUDA.jl автоматично встановлює всі необхідні бібліотеки для програмування.
Для AMD, їх необхідно встановити вручну. Детальніша інформація доступна в табличці за посиланням.
Тепер, все готово для початку роботи.
Перша програма для GPU
Перевіримо чи все встановлено правильно та виконаємо наступний код, який створить масив з 16
елементів типу Float32
, заповнить його одиницями та обчислить суму, яка має дорівнювати 16
.
CUDA:
julia> using CUDA
julia> x = CUDA.ones(Float32, 16);
julia> sum(x)
16.0f0
AMD GPU:
julia> using AMDGPU
julia> x = AMDGPU.ones(Float32, 16);
julia> sum(x)
16.0f0
Як бачимо, код для Nvidia та AMD GPU відрізняється тільки префіксом (або CUDA.
або AMDGPU.
). Тому надалі приклади будуть писатися тільки для однієї відеокарти, а де необхідно, додаватися уточненя які потрібні для роботи на тій чи іншій відеокарті.