@@ -18,25 +18,46 @@ export POCLBackend
18
18
struct POCLBackend <: KA.GPU
19
19
end
20
20
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)
24
21
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
32
23
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
33
54
34
- # # Memory Operations
55
+ KA. functional (:: POCLBackend ) = true
56
+ KA. pagelock! (:: POCLBackend , x) = nothing
35
57
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
40
61
41
62
42
63
# # Kernel Launch
0 commit comments