Skip to content

Commit a61ac84

Browse files
committed
fixup! yank CPU backend
1 parent ba30695 commit a61ac84

File tree

4 files changed

+38
-17
lines changed

4 files changed

+38
-17
lines changed

src/KernelAbstractions.jl

+2
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@ After releasing the memory of an array, it should no longer be accessed.
187187
"""
188188
function unsafe_free! end
189189

190+
unsafe_free!(::AbstractArray) = return
191+
190192
###
191193
# Kernel language
192194
# - @localmem

src/cpu.jl

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
unsafe_free!(::AbstractArray) = return
21
synchronize(::CPU) = nothing
32

43
allocate(::CPU, ::Type{T}, dims::Tuple) where {T} = Array{T}(undef, dims)

src/pocl/backend.jl

+36-15
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,46 @@ export POCLBackend
1818
struct POCLBackend <: KA.GPU
1919
end
2020

21-
# KA.allocate(::POCLBackend, ::Type{T}, dims::Tuple) where T = CLArray{T}(undef, dims)
22-
# KA.zeros(::POCLBackend, ::Type{T}, dims::Tuple) where T = OpenCL.zeros(T, dims)
23-
# KA.ones(::POCLBackend, ::Type{T}, dims::Tuple) where T = OpenCL.ones(T, dims)
2421

25-
# KA.get_backend(::CLArray) = POCLBackend()
26-
# KA.synchronize(::POCLBackend) = cl.finish(cl.queue())
27-
# KA.supports_float64(::POCLBackend) = false # XXX: this is platform/device dependent
28-
29-
# Adapt.adapt_storage(::POCLBackend, a::Array) = Adapt.adapt(CLArray, a)
30-
# Adapt.adapt_storage(::POCLBackend, a::CLArray) = a
31-
# Adapt.adapt_storage(::KA.CPU, a::CLArray) = convert(Array, a)
22+
## Memory Operations
3223

24+
KA.allocate(::POCLBackend, ::Type{T}, dims::Tuple) where {T} = Array{T}(undef, dims)
25+
26+
function KA.zeros(backend::POCLBackend, ::Type{T}, dims::Tuple) where {T}
27+
arr = allocate(backend, T, dims)
28+
kernel = init_kernel(backend)
29+
kernel(arr, zero, T, ndrange = length(arr))
30+
return arr
31+
end
32+
function KA.ones(backend::POCLBackend, ::Type{T}, dims::Tuple) where {T}
33+
arr = allocate(backend, T, dims)
34+
kernel = init_kernel(backend)
35+
kernel(arr, one, T; ndrange = length(arr))
36+
return arr
37+
end
38+
39+
function KA.copyto!(backend::POCLBackend, A, B)
40+
if get_backend(A) == get_backend(B) && get_backend(A) isa POCLBackend
41+
if length(A) != length(B)
42+
error("Arrays must match in length")
43+
end
44+
if Base.mightalias(A, B)
45+
error("Arrays may not alias")
46+
end
47+
kernel = copy_kernel(backend)
48+
kernel(A, B, ndrange = length(A))
49+
return A
50+
else
51+
return Base.copyto!(A, B)
52+
end
53+
end
3354

34-
## Memory Operations
55+
KA.functional(::POCLBackend) = true
56+
KA.pagelock!(::POCLBackend, x) = nothing
3557

36-
# function KA.copyto!(::POCLBackend, A, B)
37-
# copyto!(A, B)
38-
# # TODO: Address device to host copies in jl being synchronizing
39-
# end
58+
KA.get_backend(::Array) = POCLBackend()
59+
KA.synchronize(::POCLBackend) = nothing
60+
KA.supports_float64(::POCLBackend) = true
4061

4162

4263
## Kernel Launch

src/pocl/pocl.jl

-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ import .POCLKernels: POCLBackend
6767
export POCLBackend
6868

6969
import KernelAbstractions as KA
70-
KA.get_backend(::Array) = POCLBackend()
7170

7271
Adapt.adapt_storage(::POCLBackend, a::Array) = a
7372

0 commit comments

Comments
 (0)