Skip to content

AMDGPU.jlProgramming AMD GPUs with Julia

AMDGPU.jl

Install ​

Simply add the AMDGPU.jl package to your Julia environment:

julia
using Pkg

Pkg.add("AMDGPU")

Requirements ​

  • Julia 1.10+

  • MI300X requires Julia 1.12+

  • 64-bit Linux or Windows

  • ROCm 6.0+

Required software ​

LinuxWindows
ROCmROCm
-AMD Software: Adrenalin Edition

On Windows AMD Software

Adrenalin Edition contains HIP library itself, while ROCm provides support for other functionality.

On Fedora ROCm packages

Although not included in the AMD's list of supported Linux distributions, Fedora provides its own ROCM packages.

sudo dnf install rocminfo rocblas rocfft rocsparse rocsolver rocrand roctracer miopen rocm-hip-devel

Test ​

To ensure that everything works, you can run the test suite:

julia
using AMDGPU
using Pkg

Pkg.test("AMDGPU")

Example ​

Element-wise addition via high-level interface & low-level kernel:

julia
using AMDGPU

function vadd!(c, a, b)
   i = workitemIdx().x + (workgroupIdx().x - 1) * workgroupDim().x
   if i ≤ length(a)
       c[i] = a[i] + b[i]
   end
   return
end

a = AMDGPU.ones(Int, 1024)
b = AMDGPU.ones(Int, 1024)
c = AMDGPU.zeros(Int, 1024)

groupsize = 256
gridsize = cld(length(c), groupsize)
@roc groupsize=groupsize gridsize=gridsize vadd!(c, a, b)

@assert (a .+ b) ≈ c

Feature overview ​

AreaWhat you getLearn more
ArraysDense ROCArray, broadcasting, reductions, sortingArray Programming
KernelsNative @roc kernels and portable KernelAbstractionsKernel Programming
Multi-GPUTask-local devices and streamsTasks and Streams
Linear algebra*, \, cholesky, lu, qr via rocBLAS/rocSOLVERLinear Algebra
SparseCSR/CSC/COO arrays, SpMV/SpMM via rocSPARSESparse Arrays
FFTfft/plan_fft via rocFFTFourier Transforms
Randomrand/randn via rocRANDRandom Numbers
Deep learningConv/pooling/softmax via MIOpen (NNlib/Flux)Deep Learning (MIOpen)
Tensor operationscontract/permute/reduce via hipTensorTensor Operations

Questions and Contributions ​

Usage questions can be posted on the Julia Discourse forum under the GPU domain and/or in the #gpu channel of the Julia Slack.

Contributions are very welcome, as are feature requests and suggestions. Please open an issue if you encounter any problems.

Acknowledgment ​

AMDGPU.jl would not have been possible without the work by Tim Besard and contributors to CUDA.jl and LLVM.jl.

License ​

AMDGPU.jl is licensed under the MIT License.