Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make RecursiveFactorization.jl optional #569

Merged
27 commits merged into from
Feb 5, 2025
Merged

Make RecursiveFactorization.jl optional #569

27 commits merged into from
Feb 5, 2025

Conversation

ChrisRackauckas
Copy link
Member

RecrusiveFactorization.jl brings in the LoopVectorization.jl stack, and so it's not a small dependency. It is a good thing to default to often, but we can make it a bit more optional in order to greatly decrease load times.

@ChrisRackauckas
Copy link
Member Author

ChrisRackauckas commented Feb 1, 2025

Before and after:

@time_imports using LinearSolve
#=
      8.1 ms  Preferences
      0.6 ms  PrecompileTools
      1.4 ms  ArrayInterface
      0.5 ms  IfElse
      1.1 ms  CommonWorldInvalidations
     11.0 ms  Static
      0.7 ms  Compat
      0.5 ms  Compat → CompatLinearAlgebraExt
     13.8 ms  StaticArrayInterface
      0.6 ms  SIMDTypes
      0.9 ms  ManualMemory
      1.8 ms  LayoutPointers
               ┌ 0.0 ms CPUSummary.__init__() 
      1.7 ms  CPUSummary
      0.6 ms  BitTwiddlingConvenienceFunctions
               ┌ 0.0 ms HostCPUFeatures.__init__() 
      5.2 ms  HostCPUFeatures
     83.8 ms  VectorizationBase
      2.4 ms  SLEEFPirates
      0.6 ms  UnPack
     15.3 ms  OffsetArrays
      1.2 ms  StaticArrayInterface → StaticArrayInterfaceOffsetArraysExt
               ┌ 0.0 ms ThreadingUtilities.__init__() 
      4.3 ms  ThreadingUtilities
               ┌ 0.0 ms PolyesterWeave.__init__() 
      2.9 ms  PolyesterWeave
               ┌ 0.0 ms DocStringExtensions.__init__() 
      1.2 ms  DocStringExtensions
      2.6 ms  CloseOpenIntervals
     85.3 ms  LoopVectorization
     10.5 ms  StrideArraysCore
      1.2 ms  Polyester
      1.0 ms  TriangularSolve
    141.3 ms  RecursiveFactorization
               ┌ 7.4 ms SuiteSparse_jll.__init__() 
     10.8 ms  SuiteSparse_jll
      1.2 ms  Serialization
               ┌ 7.1 ms SparseArrays.CHOLMOD.__init__() 83.32% compilation time
    151.4 ms  SparseArrays 3.92% compilation time
      0.9 ms  ArrayInterface → ArrayInterfaceSparseArraysExt
     35.3 ms  FillArrays
    114.7 ms  ArrayLayouts
      2.8 ms  FillArrays → FillArraysSparseArraysExt
      1.1 ms  ArrayLayouts → ArrayLayoutsSparseArraysExt
      8.1 ms  MacroTools
     46.6 ms  LazyArrays
      1.1 ms  ConstructionBase
      0.8 ms  ConstructionBase → ConstructionBaseLinearAlgebraExt
      9.9 ms  RecipesBase
      1.2 ms  StaticArraysCore
      1.3 ms  Statistics
      0.9 ms  ArrayInterface → ArrayInterfaceStaticArraysCoreExt
      1.0 ms  ExprTools
      1.0 ms  RuntimeGeneratedFunctions
               ┌ 0.0 ms InverseFunctions.__init__() 
      1.8 ms  InverseFunctions
      0.7 ms  CompositionsBase
      0.7 ms  CompositionsBase → CompositionsBaseInverseFunctionsExt
      0.7 ms  InverseFunctions → InverseFunctionsDatesExt
               ┌ 0.0 ms Accessors.__init__() 
     12.2 ms  Accessors
      0.8 ms  Accessors → LinearAlgebraExt
      3.6 ms  SymbolicIndexingInterface
      0.9 ms  Adapt
      0.7 ms  DataValueInterfaces
      1.1 ms  DataAPI
      0.8 ms  IteratorInterfaceExtensions
      0.7 ms  TableTraits
      4.0 ms  OrderedCollections
      8.9 ms  Tables
      1.1 ms  GPUArraysCore
      0.9 ms  ArrayInterface → ArrayInterfaceGPUArraysCoreExt
     19.5 ms  RecursiveArrayTools
      1.3 ms  SciMLStructures
               ┌ 0.0 ms Distributed.__init__() 
     10.2 ms  Distributed
      0.9 ms  CommonSolve
      5.8 ms  FunctionWrappers
      1.1 ms  FunctionWrappersWrappers
      1.0 ms  EnumX
      3.2 ms  ADTypes
      1.1 ms  ADTypes → ADTypesConstructionBaseExt
     84.0 ms  MLStyle 18.68% compilation time
      5.1 ms  Expronicon
      0.9 ms  Reexport
     10.4 ms  SciMLOperators
      0.9 ms  SciMLOperators → SciMLOperatorsStaticArraysCoreExt
               ┌ 0.0 ms SciMLBase.__init__() 
     92.2 ms  SciMLBase
      1.1 ms  FillArrays → FillArraysStatisticsExt
      0.9 ms  Statistics → SparseArraysExt
      0.9 ms  OffsetArrays → OffsetArraysAdaptExt
      1.0 ms  RecursiveArrayTools → RecursiveArrayToolsSparseArraysExt
      0.8 ms  SciMLOperators → SciMLOperatorsSparseArraysExt
      7.3 ms  Setfield
     14.2 ms  KLU
      2.2 ms  Sparspak
      3.1 ms  FastLapackInterface
     17.8 ms  ChainRulesCore
      1.1 ms  ArrayInterface → ArrayInterfaceChainRulesCoreExt
      0.9 ms  ADTypes → ADTypesChainRulesCoreExt
      1.0 ms  SciMLBase → SciMLBaseChainRulesCoreExt
      1.0 ms  ChainRulesCore → ChainRulesCoreSparseArraysExt
      0.9 ms  ConcreteStructs
      9.3 ms  Krylov
               ┌ 0.1 ms LinearSolve.__init__() 
    154.3 ms  LinearSolve
      1.2 ms  LinearSolve → LinearSolveRecursiveArrayToolsExt
=#

@time using LinearSolve
# 1.368764 seconds (1.78 M allocations: 114.200 MiB, 3.25% gc time, 3.09% compilation time)




@time_imports using LinearSolve
#=
      7.7 ms  Preferences
      0.6 ms  PrecompileTools
      1.3 ms  ArrayInterface
               ┌ 6.2 ms SuiteSparse_jll.__init__() 
      8.6 ms  SuiteSparse_jll
      1.1 ms  Serialization
               ┌ 6.6 ms SparseArrays.CHOLMOD.__init__() 83.71% compilation time
    146.8 ms  SparseArrays 3.76% compilation time
      0.7 ms  ArrayInterface → ArrayInterfaceSparseArraysExt
     34.3 ms  FillArrays
    108.8 ms  ArrayLayouts
      2.7 ms  FillArrays → FillArraysSparseArraysExt
      1.1 ms  ArrayLayouts → ArrayLayoutsSparseArraysExt
      8.6 ms  MacroTools
     45.0 ms  LazyArrays
      0.8 ms  ConstructionBase
      0.7 ms  ConstructionBase → ConstructionBaseLinearAlgebraExt
     18.3 ms  RecipesBase
               ┌ 0.0 ms DocStringExtensions.__init__() 
      1.5 ms  DocStringExtensions
      1.1 ms  StaticArraysCore
      1.0 ms  Statistics
      0.8 ms  ArrayInterface → ArrayInterfaceStaticArraysCoreExt
      0.7 ms  ExprTools
      0.8 ms  RuntimeGeneratedFunctions
               ┌ 0.0 ms InverseFunctions.__init__() 
      1.7 ms  InverseFunctions
      0.6 ms  CompositionsBase
      0.6 ms  CompositionsBase → CompositionsBaseInverseFunctionsExt
      0.6 ms  InverseFunctions → InverseFunctionsDatesExt
               ┌ 0.0 ms Accessors.__init__() 
     12.1 ms  Accessors
      0.8 ms  Accessors → LinearAlgebraExt
      3.0 ms  SymbolicIndexingInterface
      0.8 ms  Adapt
      0.6 ms  DataValueInterfaces
      0.9 ms  DataAPI
      0.7 ms  IteratorInterfaceExtensions
      0.6 ms  TableTraits
      3.3 ms  OrderedCollections
      8.8 ms  Tables
      0.9 ms  GPUArraysCore
      0.7 ms  ArrayInterface → ArrayInterfaceGPUArraysCoreExt
     19.7 ms  RecursiveArrayTools
      0.9 ms  SciMLStructures
               ┌ 0.0 ms Distributed.__init__() 
     10.0 ms  Distributed
      0.7 ms  CommonSolve
      5.8 ms  FunctionWrappers
      0.8 ms  FunctionWrappersWrappers
      0.8 ms  EnumX
      3.0 ms  ADTypes
      0.9 ms  ADTypes → ADTypesConstructionBaseExt
     72.4 ms  MLStyle 20.92% compilation time
      4.8 ms  Expronicon
      0.8 ms  Reexport
      9.8 ms  SciMLOperators
      0.8 ms  SciMLOperators → SciMLOperatorsStaticArraysCoreExt
               ┌ 0.0 ms SciMLBase.__init__() 
     64.9 ms  SciMLBase
      1.0 ms  FillArrays → FillArraysStatisticsExt
      0.8 ms  Statistics → SparseArraysExt
      0.8 ms  RecursiveArrayTools → RecursiveArrayToolsSparseArraysExt
      0.8 ms  SciMLOperators → SciMLOperatorsSparseArraysExt
      6.6 ms  Setfield
      1.0 ms  UnPack
     13.7 ms  KLU
     17.9 ms  OffsetArrays
      1.9 ms  Sparspak
      0.7 ms  OffsetArrays → OffsetArraysAdaptExt
      2.8 ms  FastLapackInterface
      0.9 ms  Compat
      0.8 ms  Compat → CompatLinearAlgebraExt
     16.7 ms  ChainRulesCore
      0.9 ms  ArrayInterface → ArrayInterfaceChainRulesCoreExt
      0.8 ms  ADTypes → ADTypesChainRulesCoreExt
      0.9 ms  SciMLBase → SciMLBaseChainRulesCoreExt
      0.9 ms  ChainRulesCore → ChainRulesCoreSparseArraysExt
      0.8 ms  ConcreteStructs
      8.8 ms  Krylov
               ┌ 0.1 ms LinearSolve.__init__() 
    117.3 ms  LinearSolve
      1.1 ms  LinearSolve → LinearSolveRecursiveArrayToolsExt
=#

@time using LinearSolve
# 0.879719 seconds (986.15 k allocations: 72.304 MiB, 1.01% gc time, 4.55% compilation time)

src/extension_algs.jl Outdated Show resolved Hide resolved
src/extension_algs.jl Outdated Show resolved Hide resolved
@ChrisRackauckas
Copy link
Member Author

This is now done, but breaking so not merging quite yet.

ChrisRackauckas and others added 25 commits February 5, 2025 08:15
RecrusiveFactorization.jl brings in the LoopVectorization.jl stack, and so it's not a small dependency. It is a good thing to default to often, but we can make it a bit more optional in order to greatly decrease load times.
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
ChrisRackauckas and others added 2 commits February 5, 2025 08:15
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@oscardssmith
Copy link
Contributor

do we have a plan for when we want to merge this? Also is the sparse side in the same bucket?

@ChrisRackauckas
Copy link
Member Author

I was going to merge today with the sparse stuff as one big breaking release.

@ChrisRackauckas ChrisRackauckas closed this pull request by merging all changes into main in 88dc1f6 Feb 5, 2025
@ChrisRackauckas ChrisRackauckas deleted the optional_rflu branch February 5, 2025 21:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants