JuliaSIMD / StrideArraysCore.jl

The core AbstractStrideArray type, separated from StrideArrays.jl to avoid circular dependencies.
MIT License
17 stars 8 forks source link

Not always a `DenseArray`!!! #45

Open chriselrod opened 11 months ago

chriselrod commented 11 months ago

Unfortunately, Julia Base has only limited use of traits.

DenseArray for opting into/out of BLAS/LAPACK is instead part of a type tree.

The fix (other than switching Base to a trait-based approach) is to define two separate type trees within StrideArraysCore, one for dense instances, and the other for non.

Currently, all subtype dense. There is already a precendent for libraries doing this even when not valid for BLAS https://github.com/JuliaGPU/GPUArrays.jl/blob/6becb4fdfe213d327acab47225595ad9df785dfd/src/device/abstractarray.jl#L15 so probably not the end of the world to lie for now.

On the other hand, not lying has serious consequences https://github.com/JuliaSIMD/Polyester.jl/issues/127

chriselrod commented 2 months ago

Related, StridedMatrix implies columns are contiguous.

julia> A isa StridedMatrix
true

julia> A' isa StridedMatrix
false

julia> transpose(A') isa StridedMatrix
true

julia> PtrArray(A) isa StridedMatrix
true

julia> PtrArray(A') isa StridedMatrix
true

julia> PtrArray(A)' isa StridedMatrix
true