|
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