Могу ли я использовать Julia для программирования своего GPU и процессора?
В моей системе установлена видеокарта. Я не играю в игры.
Я хочу запрограммировать некоторые высокопроизводительные вычисления для развлечения.
Могу ли я использовать JULIA lang для использования моего оборудования?
3 ответа
ДА!
Введите OpenCL.jl
*Как установить?
Pkg.add("OpenCL");
Pkg.update()
Используйте следующую ссылку, чтобы проверить различные вычислительные платформы OPENCL на вашем оборудовании
https://github.com/JuliaGPU/OpenCL.jl/blob/master/examples/performance.jl
Я успешно использую библиотеку ArrayFire, используя оболочку Julia. Он поддерживает как CUDA, так и OpenCL (и CPU).
Это довольно легко понять и использовать:
#Random number generation
a = rand(AFArray{Float64}, 100, 100)
#Basic arithmetic operations
c = sin(a) + 0.5
d = a * 5
Вот контрольный прогон:
julia> benchmark()
INFO: Warmup done!
INFO: Matmul
Time (CPU): 0.042887455
Time (GPU): 0.0417952754
INFO: FFT
Time (CPU): 0.074640831
Time (GPU): 0.009890463
INFO: Rand
Time (CPU): 0.089245094
Time (GPU): 0.0097255858
INFO: Vec sort
Time (CPU): 0.11730852
Time (GPU): 0.0384733068
CUDA хорошо подходит для NVIDIA, но широко используется в научных вычислениях. У Джулии есть несколько пакетов, связанных с CUDA, но я использую CUDArt, который хорошо работает для меня.
https://github.com/JuliaGPU/CUDArt.jl
Обычно вам нужно вручную освобождать память, которую вы выделяете на GPU, но в этом пакете есть классы CudaArray, которые зарегистрированы в Julia GC, поэтому вам не нужно беспокоиться об утечках памяти. Когда ваши потребности в памяти более требовательны, вы, конечно, можете управлять памятью вручную.
Когда вы начинаете писать свои собственные ядра, также легко вызывать их непосредственно из Julia, если вы компилируете их в PTX (не в общие объекты / библиотеки DLL). Вы можете в реальном времени перезагрузить их в рамках существующего сеанса Джулии, если подойдете к нему таким образом.