@@ -18,25 +18,46 @@ export POCLBackend
1818struct POCLBackend <: KA.GPU
1919end
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
0 commit comments