Skip to content

Commit b77a4da

Browse files
committed
Clean-ups.
1 parent 4aa430c commit b77a4da

File tree

4 files changed

+17
-54
lines changed

4 files changed

+17
-54
lines changed

src/host/abstractarray.jl

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,37 +23,17 @@ backend(::Type{<:AbstractGPUDevice}) = error("Not implemented") # COV_EXCL_LINE
2323

2424
## serialization
2525

26-
import Serialization: AbstractSerializer, serialize, deserialize, serialize_type
26+
using Serialization: AbstractSerializer, serialize_type
2727

28-
function serialize(s::AbstractSerializer, t::T) where T <: AbstractGPUArray
28+
function Serialization.serialize(s::AbstractSerializer, t::T) where T <: AbstractGPUArray
2929
serialize_type(s, T)
3030
serialize(s, Array(t))
3131
end
32-
function deserialize(s::AbstractSerializer, ::Type{T}) where T <: AbstractGPUArray
32+
function Serialization.deserialize(s::AbstractSerializer, ::Type{T}) where T <: AbstractGPUArray
3333
A = deserialize(s)
3434
T(A)
3535
end
3636

37-
function to_cartesian(A, indices::Tuple)
38-
start = CartesianIndex(ntuple(length(indices)) do i
39-
val = indices[i]
40-
isa(val, Integer) && return val
41-
isa(val, UnitRange) && return first(val)
42-
isa(val, Colon) && return 1
43-
isa(val, Base.Slice{Base.OneTo{Int}}) && return 1
44-
error("GPU indexing only defined for integers or unit ranges. Found: $val")
45-
end)
46-
stop = CartesianIndex(ntuple(length(indices)) do i
47-
val = indices[i]
48-
isa(val, Integer) && return val
49-
isa(val, UnitRange) && return last(val)
50-
isa(val, Colon) && return size(A, i)
51-
isa(val, Base.Slice{Base.OneTo{Int}}) && return size(A, i)
52-
error("GPU indexing only defined for integers or unit ranges. Found: $val")
53-
end)
54-
CartesianIndices(start, stop)
55-
end
56-
5737
## convert to CPU (keeping wrapper type)
5838

5939
Adapt.adapt_storage(::Type{<:Array}, xs::AbstractArray) = convert(Array, xs)

src/host/base.jl

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,6 @@ Base.map!(f, y::AbstractGPUArray, x::AbstractGPUArray) =
1919
Base.map!(f, y::AbstractGPUArray, x1::AbstractGPUArray, x2::AbstractGPUArray) =
2020
invoke(map!, Tuple{Any,AbstractGPUArray, Vararg{AbstractGPUArray}}, f, y, x1, x2)
2121

22-
# This is pretty ugly, but I feel bad to add those to device arrays, since
23-
# we're never bound checking... So getindex(a::AbstractGPUVector, 10, 10) would silently go unnoticed
24-
# we need this here for easier implementation of repeat
25-
@inline Base.@propagate_inbounds getidx_2d1d(x::AbstractVector, i, j) = x[i]
26-
@inline Base.@propagate_inbounds getidx_2d1d(x::AbstractMatrix, i, j) = x[i, j]
27-
2822
function Base.repeat(a::AbstractGPUVecOrMat, m::Int, n::Int = 1)
2923
o, p = size(a, 1), size(a, 2)
3024
b = similar(a, o*m, p*n)
@@ -36,7 +30,7 @@ function Base.repeat(a::AbstractGPUVecOrMat, m::Int, n::Int = 1)
3630
c = (i - 1) * o + 1
3731
for r in 1:p
3832
for k in 1:o
39-
b[k - 1 + c, r - 1 + d] = getidx_2d1d(a, k, r)
33+
b[k - 1 + c, r - 1 + d] = a[k, r]
4034
end
4135
end
4236
end

src/host/linalg.jl

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -41,41 +41,35 @@ function Base.copyto!(A::AbstractGPUArray, B::Adjoint{T, <: AbstractGPUArray}) w
4141
end
4242

4343
function LinearAlgebra.tril!(A::AbstractGPUMatrix{T}, d::Integer = 0) where T
44-
function kernel!(ctx, _A, _d)
44+
gpu_call(A, d) do ctx, _A, _d
4545
I = @cartesianidx _A
4646
i, j = Tuple(I)
4747
if i < j - _d
4848
_A[i, j] = 0
4949
end
50-
return nothing
50+
return
5151
end
52-
53-
gpu_call(kernel!, A, d)
5452
return A
5553
end
5654

5755
function LinearAlgebra.triu!(A::AbstractGPUMatrix{T}, d::Integer = 0) where T
58-
function kernel!(ctx, _A, _d)
56+
gpu_call(A, d) do ctx, _A, _d
5957
I = @cartesianidx _A
6058
i, j = Tuple(I)
6159
if j < i + _d
6260
_A[i, j] = 0
6361
end
64-
return nothing
62+
return
6563
end
66-
67-
gpu_call(kernel!, A, d)
6864
return A
6965
end
7066

7167
function LinearAlgebra.copy_transpose!(dst::AbstractGPUArray, src::AbstractGPUArray)
72-
function kernel(ctx, dst, src)
68+
gpu_call(st, src) do ctx, dst, src
7369
I = @cartesianidx dst
7470
dst[I...] = src[reverse(I)...]
7571
return
7672
end
77-
78-
gpu_call(kernel, dst, src)
7973
return dst
8074
end
8175

@@ -93,7 +87,7 @@ function generic_matmatmul!(C::AbstractVecOrMat{R}, A::AbstractVecOrMat{T}, B::A
9387
return fill!(C, zero(R))
9488
end
9589

96-
function kernel(ctx, C, A, B)
90+
gpu_call(C, A, B) do ctx, C, A, B
9791
idx = @linearidx C
9892
i, j = Tuple(CartesianIndices(C)[idx])
9993

@@ -109,8 +103,6 @@ function generic_matmatmul!(C::AbstractVecOrMat{R}, A::AbstractVecOrMat{T}, B::A
109103
return
110104
end
111105

112-
gpu_call(kernel, C, A, B)
113-
114106
C
115107
end
116108

@@ -125,25 +117,23 @@ LinearAlgebra.mul!(C::AbstractGPUVecOrMat, A::LinearAlgebra.Adjoint{<:Any, <:Abs
125117
LinearAlgebra.mul!(C::AbstractGPUVecOrMat, A::LinearAlgebra.Transpose{<:Any, <:AbstractGPUVecOrMat}, B::LinearAlgebra.Transpose{<:Any, <:AbstractGPUVecOrMat}) = generic_matmatmul!(C, A, B)
126118

127119
function generic_rmul!(X::AbstractGPUArray, s::Number)
128-
function kernel(ctx, X, s)
120+
gpu_call(X, s) do ctx, X, s
129121
i = @linearidx X
130122
@inbounds X[i] *= s
131123
return
132124
end
133-
gpu_call(kernel, X, s)
134-
X
125+
return X
135126
end
136127

137128
LinearAlgebra.rmul!(A::AbstractGPUArray, b::Number) = generic_rmul!(A, b)
138129

139130
function generic_lmul!(s::Number, X::AbstractGPUArray)
140-
function kernel(ctx, X, s)
131+
gpu_call(X, s) do ctx, X, s
141132
i = @linearidx X
142133
@inbounds X[i] = s*X[i]
143134
return
144135
end
145-
gpu_call(kernel, X, s)
146-
X
136+
return X
147137
end
148138

149139
LinearAlgebra.lmul!(a::Number, B::AbstractGPUArray) = generic_lmul!(a, B)

src/host/math.jl

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
import Base.clamp!
1+
# Base mathematical operations
22

33
function Base.clamp!(A::AbstractGPUArray, low, high)
4-
function kernel(state, A, low, high)
5-
I = @cartesianidx A state
4+
gpu_call(A, low, high) do ctx, A, low, high
5+
I = @cartesianidx A ctx
66
A[I] = clamp(A[I], low, high)
77
return
88
end
9-
gpu_call(kernel, A, low, high)
109
return A
1110
end

0 commit comments

Comments
 (0)