我的系统有显卡。我不玩游戏。
我想编写一些高性能计算的东西来取乐。
我可以使用 JULIA lang 来利用我的硬件吗?
是的!
*如何安装?
Pkg.add("OpenCL");
Pkg.update()
使用以下链接检查硬件上的各种 OPENCL 计算平台
https://github.com/JuliaGPU/OpenCL.jl/blob/master/examples/performance.jl
我使用Julia wrapper成功使用了ArrayFire库。它同时支持 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 专有的,但广泛用于科学计算。Julia 有几个与 CUDA 相关的软件包,但我一直在使用 CUDArt,它对我来说效果很好。
https://github.com/JuliaGPU/CUDArt.jl
通常你必须手动释放你在 GPU 上分配的内存,但是这个包有注册到 Julia GC 的 CudaArray 类,所以你不必担心内存泄漏。当您的内存需求更高时,您当然可以手动管理内存。
当您开始编写自己的内核时,如果您将它们编译为 PTX(而不是共享对象/dll),直接从 Julia 调用它们也很容易。如果您以这种方式接近它,您实际上可以在现有的 Julia 会话中实时重新加载它们。