DistributedArrays.jl icon indicating copy to clipboard operation
DistributedArrays.jl copied to clipboard

DArray roadmap

Open jakebolewski opened this issue 9 years ago • 21 comments

object identity and equality

  • [x] copy
  • [x] deepcopy (aliases)
  • [ ] hash (works but through the AbstractArray fallback)
  • [x] identity
  • [x] isbits
  • [ ] isequal (works but through the AbstractArray fallback)
  • [x] isimmutable
  • [ ] lexless (works but through the AbstractArray fallback. It just requires lexcmp)
  • [ ] lexcmp (works but through the AbstractArray fallback)
  • [x] object_id
  • [x] sizeof

collections

  • [x] all!
  • [x] all
  • [x] any!
  • [x] any
  • ~~collect~~
  • [ ] contains (works but through the AbstractArray fallback)
  • [x] count
  • [ ] deleteat!
  • [x] eltype
  • [ ] empty!
  • [x] endof
  • [ ] filter!
  • [ ] filter
  • [ ] foldl (works but through the AbstractArray fallback)
  • [ ] foldr (works but through the AbstractArray fallback)
  • [x] get
  • [ ] get!
  • [x] getindex
  • [ ] in (works but through the AbstractArray fallback)
  • [ ] intersect!
  • [ ] intersect (works but through the AbstractArray fallback)
  • [x] isempty
  • [ ] issubset (works but through the AbstractArray fallback)
  • [x] length
  • [x] map!
  • [x] map
  • [ ] mapfoldl (works but through the AbstractArray fallback)
  • [ ] mapfoldr (works but through the AbstractArray fallback)
  • [x] mapreduce
  • [x] mapreducedim
  • [x] reduce
  • [ ] setdiff (works but through the AbstractArray fallback)
  • [ ] setindex!
  • [x] similar
  • ~~sizehint!~~ (Probably doesn't make sense)
  • [ ] splice!
  • [ ] symdiff (works but through the AbstractArray fallback)
  • [ ] union (works but through the AbstractArray fallback)
  • [ ] unique (works but through the AbstractArray fallback)

iteration (works but through the AbstractArray fallback. This requires some care to work well)

  • [ ] done
  • [ ] enumerate
  • [ ] next
  • [ ] start
  • [ ] zip
  • [ ] rest
  • [ ] countfrom
  • [ ] take
  • [ ] drop
  • [ ] cycle
  • [ ] repeated

arrays

  • [ ] broadcast!
  • [x] broadcast
  • [ ] cat
  • [x] checkbounds
  • [ ] circshift
  • [ ] conj!
  • [x] copy!
  • [ ] cummax
  • [ ] cummin
  • [ ] cumprod
  • [ ] cumprod!
  • [ ] cumsum
  • [ ] cumsum!
  • [ ] cumsum_kbn
  • [x] eachindex
  • [ ] extrema (works but through the AbstractArray fallback)
  • [x] fill!
  • [ ] find (works but through the AbstractArray fallback)
  • [ ] findfirst (works but through the AbstractArray fallback)
  • [ ] findlast (works but through the AbstractArray fallback)
  • [ ] findin (works but through the AbstractArray fallback)
  • [ ] findmax (works but through the AbstractArray fallback)
  • [ ] findmin (works but through the AbstractArray fallback)
  • [ ] findn (works but through the AbstractArray fallback)
  • [ ] findnext (works but through the AbstractArray fallback)
  • [ ] findprev (works but through the AbstractArray fallback)
  • [ ] findnz (works but through the AbstractArray fallback)
  • [ ] first (works but through the AbstractArray fallback)
  • [ ] flipdim
  • ~~gradient~~ (will probably go away in base)
  • [ ] hcat
  • [ ] hvcat
  • [x] ind2sub
  • [ ] indexin (works but through the AbstractArray fallback)
  • [ ] indmax (works but through the AbstractArray fallback)
  • [ ] indmin (works but through the AbstractArray fallback)
  • [ ] invperm
  • [ ] ipermute!
  • [ ] ipermutedims
  • [ ] isperm (works but through the AbstractArray fallback)
  • [ ] issorted (works but through the AbstractArray fallback)
  • [ ] last (works but through the AbstractArray fallback)
  • [ ] linspace (dlinspace?)
  • [ ] logspace (dlogspace?)
  • [x] mapslices
  • [ ] max (works but through the AbstractArray fallback)
  • [x] maxabs
  • [ ] maxabs!
  • [ ] maximum!
  • [x] maximum
  • [ ] min (works but through the AbstractArray fallback)
  • [x] minabs
  • [ ] minabs!
  • [ ] minimum!
  • [x] minimum
  • [ ] minmax
  • [x] ndims
  • [x] nnz
  • [ ] nonzeros
  • [x] countnz
  • [x] ones
  • [x] parent
  • [x] parentindexes
  • [ ] permute!
  • [ ] permutedims
  • [ ] permutedims!
  • [ ] prod!
  • [x] prod
  • [x] promote_shape
  • [ ] randcycle (drandcycle)
  • [ ] randperm (drandperm)
  • [ ] randsubseq! (works but through the AbstractArray fallback)
  • [ ] randsubseq (works but through the AbstractArray fallback)
  • [x] reducedim
  • [ ] repmat
  • [x] reshape
  • [ ] reverse!
  • [ ] reverse
  • [ ] rot180
  • [ ] rotl90
  • [ ] rotr90
  • [ ] searchsorted (works but through the AbstractArray fallback)
  • [ ] searchsortedfirst (works but through the AbstractArray fallback)
  • [ ] searchsortedlast (works but through the AbstractArray fallback)
  • [ ] select!
  • [ ] select
  • [ ] shuffle
  • [ ] shuffle!
  • [x] size
  • [x] view
  • [ ] slicedim
  • [ ] sort!
  • [x] sort
  • [ ] sortcols
  • [ ] sortperm (works but through the AbstractArray fallback)
  • [ ] sortperm!
  • [ ] sortrows
  • [ ] squeeze
  • [ ] step
  • [ ] stride
  • [ ] strides
  • [ ] sub
  • [ ] sub2ind
  • [ ] sum!
  • [x] sum
  • [ ] sumabs!
  • [x] sumabs
  • [ ] sumabs2!
  • [x] sumabs2
  • [ ] sum_kbn
  • [ ] vcat
  • [ ] vec
  • [x] zeros

linear algebra

  • [ ] bkfact!
  • [ ] bkfact
  • [ ] blas_set_num_threads
  • [ ] blkdiag
  • [ ] chol
  • [ ] cholfact!
  • [ ] cholfact
  • [ ] cond
  • [ ] condskeel
  • [ ] cross
  • [ ] ctranspose!
  • [x] ctranspose
  • [ ] det
  • [ ] diag
  • [ ] diagind
  • [ ] diagm
  • [ ] diff
  • [ ] dot
  • [ ] eig
  • [ ] eigfact!
  • [ ] eigfact
  • [ ] eigmax
  • [ ] eigmin
  • [ ] eigs
  • [ ] eigvals
  • [ ] eigvals!
  • [ ] eigvecs
  • [ ] expm
  • [ ] eye
  • [ ] factorize
  • [ ] givens
  • [ ] hessfact!
  • [ ] hessfact
  • [ ] ishermitian
  • [ ] isposdef!
  • [ ] isposdef
  • [ ] issym
  • [ ] istril
  • [ ] istriu
  • [ ] kron
  • [ ] ldltfact
  • [ ] ldltfact!
  • [ ] linreg
  • [ ] logdet
  • [ ] lu
  • [ ] lufact!
  • [ ] lufact
  • [ ] lyap
  • [ ] norm
  • [ ] nullspace
  • [ ] ordschur!
  • [ ] ordschur
  • [ ] peakflops
  • [ ] pinv
  • [ ] qr
  • [ ] qrfact!
  • [ ] qrfact
  • [ ] rank
  • [x] scale!
  • [ ] scale
  • [ ] schur
  • [ ] schurfact!
  • [ ] schurfact
  • [ ] sqrtm
  • [ ] svd
  • [ ] svdfact!
  • [ ] svdfact
  • [ ] svds
  • [ ] svdvals!
  • [ ] svdvals
  • [ ] sylvester
  • [ ] trace
  • [ ] transpose!
  • [x] transpose
  • [ ] tril!
  • [ ] tril
  • [ ] triu!
  • [ ] triu
  • [ ] vecnorm

sparse

  • [ ] etree
  • [ ] full
  • [ ] issparse
  • [ ] sparse
  • [ ] sparsevec
  • [ ] spdiagm
  • [ ] speye
  • [ ] spones
  • [ ] sprand
  • [ ] sprandbool
  • [ ] sprandn
  • [ ] spzeros
  • [ ] symperm
  • [ ] rowvals
  • [ ] nzrange

Operators

  • [x] !
  • [x] !=
  • [x] ≠
  • [x] !==
  • [x] ≡
  • [x] ≢
  • [x] *
  • [x] +
  • [x] -
  • [ ] /
  • [x] //
  • [x] ==
  • [ ] \
  • [ ] ^
  • [ ] A_ldiv_B!
  • [ ] A_ldiv_Bc
  • [ ] A_ldiv_Bt
  • [ ] A_mul_B!
  • [ ] A_mul_Bc
  • [ ] A_mul_Bc!
  • [ ] A_mul_Bt
  • [ ] A_mul_Bt!
  • [ ] A_rdiv_Bc
  • [ ] A_rdiv_Bt
  • [ ] Ac_ldiv_B
  • [ ] Ac_ldiv_Bc
  • [x] Ac_mul_B
  • [x] Ac_mul_B!
  • [ ] Ac_mul_Bc
  • [ ] Ac_mul_Bc!
  • [ ] Ac_rdiv_B
  • [ ] Ac_rdiv_Bc
  • [ ] At_ldiv_B
  • [ ] At_ldiv_Bt
  • [ ] At_mul_B
  • [ ] At_mul_B!
  • [ ] At_mul_Bt
  • [ ] At_mul_Bt!
  • [ ] At_rdiv_B
  • [ ] At_rdiv_Bt

random numbers

  • [ ] rand!
  • [x] rand
  • [ ] randn!
  • [x] randn
  • [ ] randexp!
  • [ ] randexp
  • [ ] srand
  • [ ] bitrand

statistics

  • [ ] cor
  • [ ] cov
  • [x] mean!
  • [x] mean
  • [ ] median!
  • [x] median
  • [ ] middle
  • [ ] midpoints
  • [ ] quantile!
  • [ ] quantile
  • [x] std
  • [x] stdm
  • [x] var
  • [x] varm

signal processing

  • [ ] bfft!
  • [ ] bfft
  • [ ] brfft
  • [ ] conv
  • [ ] conv2
  • [ ] dct!
  • [ ] dct
  • [ ] deconv
  • [ ] fft!
  • [ ] fft
  • [ ] fftshift
  • [ ] filt
  • [ ] filt!
  • [ ] idct!
  • [ ] idct
  • [ ] ifft!
  • [ ] ifft
  • [ ] ifftshift
  • [ ] irfft
  • [ ] plan_bfft!
  • [ ] plan_bfft
  • [ ] plan_brfft
  • [ ] plan_dct!
  • [ ] plan_dct
  • [ ] plan_fft!
  • [ ] plan_fft
  • [ ] plan_idct!
  • [ ] plan_idct
  • [ ] plan_ifft!
  • [ ] plan_ifft
  • [ ] plan_irfft
  • [ ] plan_rfft
  • [ ] rfft
  • [ ] xcorr

Update 30 September 2016 by @andreasnoack: I've removed all the scalar math and special functions. With the . syntax + broadcast(x::DArray) = map(x) they should work.

jakebolewski avatar Mar 13 '15 23:03 jakebolewski

For a first pass we can skip most of the vectorized functions - i.e. all the specfuns and most of the scalar mathematical functions.

jiahao avatar Mar 14 '15 04:03 jiahao

Or implement them with macros and conquer much of this list. :-)

I love this list. I am sure @alanedelman loves it too.

ViralBShah avatar Mar 14 '15 05:03 ViralBShah

621 functions. 16 done. Only 605 to go. :-)

Cc: @amitmurthy @tanmaykm @alanedelman in case you guys haven't seen this.

ViralBShah avatar Apr 03 '15 14:04 ViralBShah

Some of these will be hard / impossible to do in parallel. My favorite is == if we want to support the same semantics as AbstractArrays now in base.

jakebolewski avatar Apr 03 '15 14:04 jakebolewski

Yes, of course!

What is the exact issue with == ? Perhaps should be a separate issue.

ViralBShah avatar Apr 04 '15 11:04 ViralBShah

@ViralBShah I agree == (with hash) should be their own issue. The challenge is how to hash DArrays in parallel so that they can test equal under == regardless of distribution. The only way we can guarantee that now for A==B is to redistribute all the data onto a single process and do the hash locally for A and B.

jiahao avatar Apr 04 '15 14:04 jiahao

@tanmaykm, @amitmurthy it would be great if you could check off functions as they are added. I believe anyone that is an owner of the repo can edit the check list.

jakebolewski avatar Apr 23 '15 04:04 jakebolewski

don't we have svd and a few other scalapack functions now?

alanedelman avatar Apr 23 '15 11:04 alanedelman

We should probably separate out linear algebra related function checklist into scalapack.jl or elemental.jl, and have this issue track only DArrays.

ViralBShah avatar Apr 23 '15 12:04 ViralBShah

but i'd like this to work with darrays :-)

On Thu, Apr 23, 2015 at 8:27 AM, Viral B. Shah [email protected] wrote:

We should probably separate out linear algebra related function checklist into scalapack.jl or elemental.jl, and have this issue track only DArrays.

— Reply to this email directly or view it on GitHub https://github.com/JuliaParallel/DistributedArrays.jl/issues/4#issuecomment-95568816 .

alanedelman avatar Apr 23 '15 12:04 alanedelman

It will, but the dependency order right now is that ScaLAPACK.jl depends on DistributedArrays.jl and, therefore, the DArray+ScaLAPACK functionality is in ScaLAPACK.jl.

andreasnoack avatar Apr 23 '15 14:04 andreasnoack

@alanedelman Just to avoid misunderstanding here. You can do

julia> using MPI

julia> man = MPIManager(np = 4);

julia> addprocs(man);

julia> using ScaLAPACK
Warning: Method definition defaultdistTuple{Int64,Int64} in module DistributedArrays at /Users/andreasnoack/.julia/v0.4/DistributedArrays/src/DistributedArrays.jl:147 overwritten in module ScaLAPACK at /Users/andreasnoack/.julia/v0.4/ScaLAPACK/src/ScaLAPACK.jl:13.
    From worker 4:  Warning: Method definition defaultdistTuple{Int64,Int64} in module DistributedArrays at /Users/andreasnoack/.julia/v0.4/DistributedArrays/src/DistributedArrays.jl:147 overwritten in module ScaLAPACK at /Users/andreasnoack/.julia/v0.4/ScaLAPACK/src/ScaLAPACK.jl:13.
    From worker 3:  Warning: Method definition defaultdistTuple{Int64,Int64} in module DistributedArrays at /Users/andreasnoack/.julia/v0.4/DistributedArrays/src/DistributedArrays.jl:147 overwritten in module ScaLAPACK at /Users/andreasnoack/.julia/v0.4/ScaLAPACK/src/ScaLAPACK.jl:13.
    From worker 2:  Warning: Method definition defaultdistTuple{Int64,Int64} in module DistributedArrays at /Users/andreasnoack/.julia/v0.4/DistributedArrays/src/DistributedArrays.jl:147 overwritten in module ScaLAPACK at /Users/andreasnoack/.julia/v0.4/ScaLAPACK/src/ScaLAPACK.jl:13.
    From worker 5:  Warning: Method definition defaultdistTuple{Int64,Int64} in module DistributedArrays at /Users/andreasnoack/.julia/v0.4/DistributedArrays/src/DistributedArrays.jl:147 overwritten in module ScaLAPACK at /Users/andreasnoack/.julia/v0.4/ScaLAPACK/src/ScaLAPACK.jl:13.

julia> @everywhere using DistributedArrays

julia> A = drandn((1000, 1000), man);

julia> B = convert(Array, A);

julia> @time valsA = svdvals(A);
elapsed time: 1.382340321 seconds (37 MB allocated, 1.53% gc time in 1 pauses with 0 full sweep)

julia> @time valsA = svdvals(A);
elapsed time: 0.323082764 seconds (1 MB allocated)

julia> @time valsB = svdvals(B);
elapsed time: 1.0682854 seconds (11 MB allocated, 0.48% gc time in 1 pauses with 0 full sweep)

julia> @time valsB = svdvals(B);
elapsed time: 0.998921006 seconds (8 MB allocated)```
The warnings will go away eventually.

andreasnoack avatar Apr 27 '15 00:04 andreasnoack

I was kind of sad that now that we are about to have the "dot" (Pronounced broadcast but I don't like that name, I prefer pointwise or just point) why we don't have these functions after all these years.

Why can't we have all the operators and all the dot operators easily?

alanedelman avatar Jan 24 '17 08:01 alanedelman

We should have all the dot stuff now but it only works on Julia 0.6 and master. Somebody just needs to go through the list and check. Some of the items are also deprecated now.

andreasnoack avatar Jan 24 '17 15:01 andreasnoack

@alanedelman I just checked and all the dot stuff works now for DArrays. However, they are not independent functions anymore but just syntax so I've removed them from the list. The important detail is that broadcast works.

andreasnoack avatar Jan 25 '17 04:01 andreasnoack

where are we on cumsum, cumprod, and accumulate ?

alanedelman avatar Jan 25 '17 05:01 alanedelman

Still some work to be done there.

andreasnoack avatar Jan 25 '17 12:01 andreasnoack

would love to bring this issue back to life

alanedelman avatar Nov 06 '17 18:11 alanedelman

me too

montyvesselinov avatar Apr 28 '19 14:04 montyvesselinov

@christopher-dG Just bringing this list to your attention. Maybe we should discuss this today?

ViralBShah avatar Apr 09 '20 14:04 ViralBShah

+1

alanedelman avatar Apr 09 '20 14:04 alanedelman