Skip to content

Commit f72bb8e

Browse files
committed
WIP: snapshot current local changes
1 parent e57298d commit f72bb8e

File tree

8 files changed

+63
-299
lines changed

8 files changed

+63
-299
lines changed

src/array/alloc.jl

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import Base: cat
22
import Random: MersenneTwister, rand!, randn!
33
export partition
4-
import LinearAlgebra: UniformScaling
54

65
mutable struct AllocateArray{T,N} <: ArrayOp{T,N}
76
eltype::Type{T}
@@ -177,7 +176,6 @@ Base.zeros(p::BlocksOrAuto, dims::Dims; assignment::AssignmentType = :arbitrary)
177176
Base.zeros(::AutoBlocks, T::Type, dims::Dims; assignment::AssignmentType = :arbitrary) =
178177
zeros(auto_blocks(dims), T, dims; assignment)
179178

180-
181179
function Base.zero(x::DArray{T,N}) where {T,N}
182180
dims = ntuple(i->x.domain.indexes[i].stop, N)
183181
sd = first(x.subdomains)
@@ -198,60 +196,6 @@ function LinearAlgebra._zeros(::Type{T}, B::DMatrix, n::Integer) where T
198196
return zeros(auto_blocks(sz), T, sz)
199197
end
200198

201-
function _allocate_diag(i,T, _dims, domain, p)
202-
sA = zeros(T, _dims)
203-
dom_idx = indexes(domain)
204-
chunk_counts = ntuple(j -> cld(length(dom_idx[j]), p.blocksize[j]), length(dom_idx))
205-
subinds_idx = CartesianIndices(ntuple(j -> Base.OneTo(chunk_counts[j]), length(chunk_counts)))[i]
206-
subinds = Tuple(subinds_idx)
207-
sd = map(enumerate(dom_idx)) do (idx, range)
208-
bsz = div(last(range), p.blocksize[idx])
209-
start = first(range) + p.blocksize[idx] * (subinds[idx] - 1)
210-
stop = subinds[idx] == bsz + 1 ? last(range) : first(range) + p.blocksize[idx] * subinds[idx] - 1
211-
start:stop
212-
end
213-
overlap = intersect(sd[1], sd[2])
214-
if !isempty(overlap)
215-
row_offset = first(sd[1]) - 1
216-
col_offset = first(sd[2]) - 1
217-
for g in overlap
218-
sA[g - row_offset, g - col_offset] = one(T)
219-
end
220-
end
221-
return sA
222-
end
223-
224-
function DMatrix(p::BlocksOrAuto, s::UniformScaling, dims::Dims; assignment::AssignmentType = :arbitrary)
225-
d = ArrayDomain(map(x->1:x, dims))
226-
sd = partition(p, d)
227-
T = eltype(s)
228-
a = AllocateArray(T, (i, T, _dims) -> _allocate_diag(i, T, _dims, d, p), true, d, partition(p, d), p, assignment)
229-
return _to_darray(a)
230-
end
231-
DMatrix(p::BlocksOrAuto, s::UniformScaling, dims::Integer...; assignment::AssignmentType = :arbitrary) =
232-
DMatrix(p, s, dims; assignment)
233-
DMatrix(::AutoBlocks, s::UniformScaling, dims::Dims; assignment::AssignmentType = :arbitrary) =
234-
DMatrix(auto_blocks(dims), s::UniformScaling, dims; assignment)
235-
236-
function DArray(p::BlocksOrAuto, s::UniformScaling, dims::Dims; assignment::AssignmentType = :arbitrary)
237-
length(dims) == 2 || throw(ArgumentError("UniformScaling allocation requires exactly two dimensions"))
238-
return DMatrix(p, s, dims; assignment)
239-
end
240-
DArray(p::BlocksOrAuto, s::UniformScaling, dims::Integer...; assignment::AssignmentType = :arbitrary) =
241-
DArray(p, s, dims; assignment)
242-
DArray(::AutoBlocks, s::UniformScaling, dims::Dims; assignment::AssignmentType = :arbitrary) =
243-
DArray(auto_blocks(dims), s::UniformScaling, dims; assignment)
244-
245-
function DArray{T}(p::BlocksOrAuto, ::UndefInitializer, dims::Dims; assignment::AssignmentType = :arbitrary) where {T}
246-
d = ArrayDomain(map(x->1:x, dims))
247-
a = AllocateArray(T, AllocateUndef{T}(), false, d, partition(p, d), p, assignment)
248-
return _to_darray(a)
249-
end
250-
251-
DArray{T}(p::BlocksOrAuto, ::UndefInitializer, dims::Integer...; assignment::AssignmentType = :arbitrary) where {T} =
252-
DArray{T}(p, undef, dims; assignment)
253-
DArray{T}(p::AutoBlocks, ::UndefInitializer, dims::Dims; assignment::AssignmentType = :arbitrary) where {T} =
254-
DArray{T}(auto_blocks(dims), undef, dims; assignment)
255199
function Base.view(A::AbstractArray{T,N}, p::Blocks{N}) where {T,N}
256200
d = ArrayDomain(Base.index_shape(A))
257201
dc = partition(p, d)

src/array/copy.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ function darray_copyto!(B::DArray{TB,NB}, A::DArray{TA,NA}, Binds=parentindices(
123123
end
124124
end
125125
end
126+
126127
return B
127128
end
128129
function copyto_view!(Bpart, Brange, Apart, Arange)

src/array/darray.jl

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,6 @@ ArrayDomain((1:15), (1:80))
6767
alignfirst(a::ArrayDomain) =
6868
ArrayDomain(map(r->1:length(r), indexes(a)))
6969

70-
alignfirst(a::CartesianIndices{N}) where N =
71-
ArrayDomain(map(r->1:length(r), a.indices))
72-
7370
function size(a::ArrayDomain, dim)
7471
idxs = indexes(a)
7572
length(idxs) < dim ? 1 : length(idxs[dim])
@@ -390,8 +387,6 @@ function lookup_parts(A::DArray, ps::AbstractArray, subdmns::DomainBlocks{N}, d:
390387
return lookup_parts(A, ps, subdmns, ArrayDomain(new_d))
391388
end
392389

393-
lookup_parts(A::DArray, ps::AbstractArray, subdmns::DomainBlocks{N}, d::CartesianIndices) where {N} = lookup_parts(A, ps, subdmns, ArrayDomain(d.indices))
394-
395390
"""
396391
Base.fetch(c::DArray)
397392

src/array/indexing.jl

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,5 @@
11
### getindex
22

3-
struct GetIndex{T,N} <: ArrayOp{T,N}
4-
input::ArrayOp
5-
idx::Tuple
6-
end
7-
8-
GetIndex(input::ArrayOp, idx::Tuple) =
9-
GetIndex{eltype(input), ndims(input)}(input, idx)
10-
11-
function flatten(subdomains, subchunks, partitioning)
12-
valdim = findfirst(j -> j != 1:1, subdomains[1].indexes)
13-
flatc = []
14-
flats = Array{ArrayDomain{1, Tuple{UnitRange{Int64}}}}(undef, 0)
15-
map(x -> push!(flats, ArrayDomain(x.indexes[valdim])), subdomains)
16-
map(x -> push!(flatc, x), subchunks)
17-
newb = Blocks(partitioning.blocksize[valdim])
18-
return flats, flatc, newb
19-
end
20-
21-
function stage(ctx::Context, gidx::GetIndex)
22-
inp = stage(ctx, gidx.input)
23-
24-
dmn = domain(inp)
25-
idxs = [if isa(gidx.idx[i], Colon)
26-
indexes(dmn)[i]
27-
else
28-
gidx.idx[i]
29-
end for i in 1:length(gidx.idx)]
30-
31-
# Figure out output dimension
32-
d = ArrayDomain(idxs)
33-
subchunks, subdomains = Dagger.lookup_parts(inp, chunks(inp), domainchunks(inp), d)
34-
d1 = alignfirst(d)
35-
newb = inp.partitioning
36-
if ndims(d1) != ndims(subdomains)
37-
subdomains, subchunks, newb = flatten(subdomains, subchunks, inp.partitioning)
38-
end
39-
DArray(eltype(inp), d1, subdomains, subchunks, newb)
40-
end
41-
42-
function size(x::GetIndex)
43-
map(a -> a[2] isa Colon ?
44-
size(x.input, a[1]) : length(a[2]),
45-
enumerate(x.idx)) |> Tuple
46-
end
47-
48-
Base.getindex(c::ArrayOp, idx::ArrayDomain) =
49-
_to_darray(GetIndex(c, indexes(idx)))
50-
Base.getindex(c::ArrayOp, idx...) =
51-
_to_darray(GetIndex(c, idx))
52-
533
const GETINDEX_CACHE = TaskLocalValue{Dict{Tuple,Any}}(()->Dict{Tuple,Any}())
544
const GETINDEX_CACHE_SIZE = ScopedValue{Int}(0)
555
with_index_caching(f, size::Integer=1) = with(f, GETINDEX_CACHE_SIZE=>size)
@@ -86,7 +36,6 @@ with_index_caching(f, size::Integer=1) = with(f, GETINDEX_CACHE_SIZE=>size)
8636
# Return the value
8737
return GPUArraysCore.@allowscalar part[offset_idx...]
8838
end
89-
9039
function partition_for(A::DArray, idx::NTuple{N,Int}) where N
9140
part_idx = zeros(Int, N)
9241
offset_idx = zeros(Int, N)

src/array/linalg.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,10 @@ function LinearAlgebra.LAPACK.chkfinite(A::DArray)
105105
end
106106

107107
DMatrix{T}(::LinearAlgebra.UniformScaling, m::Int, n::Int, IBlocks::Blocks) where T = DMatrix(Matrix{T}(I, m, n), IBlocks)
108+
DMatrix(::LinearAlgebra.UniformScaling{T}, m::Int, n::Int, IBlocks::Blocks) where T = DMatrix(Matrix{T}(I, m, n), IBlocks)
108109

109110
DMatrix{T}(::LinearAlgebra.UniformScaling, size::Tuple, IBlocks::Blocks) where T = DMatrix(Matrix{T}(I, size), IBlocks)
111+
DMatrix(::LinearAlgebra.UniformScaling{T}, size::Tuple, IBlocks::Blocks) where T = DMatrix(Matrix{T}(I, size), IBlocks)
110112

111113
function LinearAlgebra.inv(F::LU{T,<:DMatrix}) where T
112114
n = size(F, 1)

0 commit comments

Comments
 (0)