|
1 | 1 | module CUDAKernels |
2 | 2 |
|
3 | 3 | using ..CUDA |
4 | | -using ..CUDA: @device_override, CUSPARSE |
| 4 | +using ..CUDA: @device_override, CUSPARSE, default_memory, UnifiedMemory |
5 | 5 |
|
6 | 6 | import KernelAbstractions as KA |
7 | 7 |
|
|
21 | 21 |
|
22 | 22 | CUDABackend(; prefer_blocks=false, always_inline=false) = CUDABackend(prefer_blocks, always_inline) |
23 | 23 |
|
24 | | -KA.allocate(::CUDABackend, ::Type{T}, dims::Tuple) where T = CuArray{T}(undef, dims) |
25 | | -KA.zeros(::CUDABackend, ::Type{T}, dims::Tuple) where T = CUDA.zeros(T, dims) |
26 | | -KA.ones(::CUDABackend, ::Type{T}, dims::Tuple) where T = CUDA.ones(T, dims) |
| 24 | +KA.allocate(::CUDABackend, ::Type{T}, dims::Tuple; unified::Bool = false) where T = CuArray{T, length(dims), unified ? UnifiedMemory : default_memory}(undef, dims) |
| 25 | +KA.zeros(::CUDABackend, ::Type{T}, dims::Tuple; unified::Bool = false) where T = fill!(CuArray{T, length(dims), unified ? UnifiedMemory : default_memory}(undef, dims), zero(T)) |
| 26 | +KA.ones(::CUDABackend, ::Type{T}, dims::Tuple; unified::Bool = false) where T = fill!(CuArray{T, length(dims), unified ? UnifiedMemory : default_memory}(undef, dims), one(T)) |
27 | 27 |
|
28 | 28 | KA.get_backend(::CuArray) = CUDABackend() |
29 | 29 | KA.get_backend(::CUSPARSE.AbstractCuSparseArray) = CUDABackend() |
30 | 30 | KA.synchronize(::CUDABackend) = synchronize() |
31 | 31 |
|
32 | 32 | KA.functional(::CUDABackend) = CUDA.functional() |
33 | 33 |
|
| 34 | +KA.supports_unified(::CUDABackend) = true |
| 35 | + |
34 | 36 | Adapt.adapt_storage(::CUDABackend, a::AbstractArray) = Adapt.adapt(CuArray, a) |
35 | 37 | Adapt.adapt_storage(::CUDABackend, a::Union{CuArray,CUSPARSE.AbstractCuSparseArray}) = a |
36 | 38 | Adapt.adapt_storage(::KA.CPU, a::Union{CuArray,CUSPARSE.AbstractCuSparseArray}) = Adapt.adapt(Array, a) |
|
0 commit comments