Skip to content

Commit

Permalink
Add precompile statements (#109)
Browse files Browse the repository at this point in the history
- Improve "first-solve" time at expense of slightly higher first precompilation time
- Squashed commits:
* Add precompile statements
* Remove precompile statement with `Core.var`
* Remove `Base.Broadcast.restart_copyto_nonleaf!` precompile
  • Loading branch information
ericphanson authored Mar 11, 2020
1 parent 1b8c58c commit 264294d
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/COSMO.jl
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,7 @@ include("./solver.jl")
include("./interface.jl")
include("./MOIWrapper.jl")

include("precompile.jl")
_precompile_()

end #end module
47 changes: 47 additions & 0 deletions src/precompile.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
function _precompile_()
ccall(:jl_generating_output, Cint, ()) == 1 || return nothing
isdefined(COSMO, Symbol("#19#20")) && precompile(Tuple{getfield(COSMO, Symbol("#19#20")),Tuple{SubArray{Float64,1,Array{Float64,1},Tuple{UnitRange{Int64}},true},COSMO.ExponentialCone{Float64}}})
isdefined(COSMO, Symbol("#19#20")) && precompile(Tuple{getfield(COSMO, Symbol("#19#20")),Tuple{SubArray{Float64,1,Array{Float64,1},Tuple{UnitRange{Int64}},true},COSMO.Nonnegatives{Float64}}})
isdefined(COSMO, Symbol("#19#20")) && precompile(Tuple{getfield(COSMO, Symbol("#19#20")),Tuple{SubArray{Float64,1,Array{Float64,1},Tuple{UnitRange{Int64}},true},COSMO.PsdConeTriangle{Float64}}})
isdefined(COSMO, Symbol("#19#20")) && precompile(Tuple{getfield(COSMO, Symbol("#19#20")),Tuple{SubArray{Float64,1,Array{Float64,1},Tuple{UnitRange{Int64}},true},COSMO.SecondOrderCone{Float64}}})
isdefined(COSMO, Symbol("#19#20")) && precompile(Tuple{getfield(COSMO, Symbol("#19#20")),Tuple{SubArray{Float64,1,Array{Float64,1},Tuple{UnitRange{Int64}},true},COSMO.ZeroSet{Float64}}})
isdefined(COSMO, Symbol("#25#26")) && precompile(Tuple{getfield(COSMO, Symbol("#25#26")),Tuple{SubArray{Float64,1,Array{Float64,1},Tuple{UnitRange{Int64}},true},COSMO.SecondOrderCone{Float64}}})
precompile(Tuple{Type{CholmodKKTSolver},SparseArrays.SparseMatrixCSC{Float64,Int64},SparseArrays.SparseMatrixCSC{Float64,Int64},Float64,Array{Float64,1}})
precompile(Tuple{typeof(Base.Broadcast._broadcast_getindex_evalf),typeof(MathOptInterface.add_constraint),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.ExponentialCone})
precompile(Tuple{typeof(Base.Broadcast._broadcast_getindex_evalf),typeof(MathOptInterface.add_constraint),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.Nonnegatives})
precompile(Tuple{typeof(Base.Broadcast._broadcast_getindex_evalf),typeof(MathOptInterface.add_constraint),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.PositiveSemidefiniteConeTriangle})
precompile(Tuple{typeof(Base.Broadcast._broadcast_getindex_evalf),typeof(MathOptInterface.add_constraint),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.SecondOrderCone})
precompile(Tuple{typeof(Base.Broadcast._broadcast_getindex_evalf),typeof(MathOptInterface.add_constraint),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.Zeros})

precompile(Tuple{typeof(COSMO.admm_step!),Array{Float64,1},COSMO.SplitVector{Float64},Array{Float64,1},SubArray{Float64,1,Array{Float64,1},Tuple{UnitRange{Int64}},true},SubArray{Float64,1,Array{Float64,1},Tuple{UnitRange{Int64}},true},Array{Float64,1},Array{Float64,1},Array{Float64,1},CholmodKKTSolver{Float64,Int64},Array{Float64,1},Array{Float64,1},Array{Float64,1},Float64,Float64,Int64,Int64,COSMO.CompositeConvexSet{Float64}})
precompile(Tuple{typeof(COSMO.apply_sense!),MathOptInterface.OptimizationSense,SparseArrays.SparseMatrixCSC{Float64,Int64},Array{Float64,1},Float64})
precompile(Tuple{typeof(COSMO.dual_kkt_condition!),Array{Float64,1},Array{Float64,1},SparseArrays.SparseMatrixCSC{Float64,Int64},Array{Float64,1},Array{Float64,1},SparseArrays.SparseMatrixCSC{Float64,Int64},Array{Float64,1}})
precompile(Tuple{typeof(COSMO.kkt_col_norms!),SparseArrays.SparseMatrixCSC{Float64,Int64},SparseArrays.SparseMatrixCSC{Float64,Int64},Array{Float64,1},Array{Float64,1}})
precompile(Tuple{typeof(COSMO.optimize!),COSMO.Workspace{Float64}})
precompile(Tuple{typeof(COSMO.pass_attributes!),Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}},MathOptInterface.Utilities.IndexMap,Function})
precompile(Tuple{typeof(COSMO.pre_allocate_variables!),COSMO.Workspace{Float64}})
precompile(Tuple{typeof(COSMO.primal_kkt_condition!),Array{Float64,1},SparseArrays.SparseMatrixCSC{Float64,Int64},Array{Float64,1},COSMO.SplitVector{Float64},Array{Float64,1}})
precompile(Tuple{typeof(COSMO.processconstraints!),Tuple{Array{Int64,1},Array{Int64,1},Array{Float64,1}},Array{Float64,1},Array{COSMO.AbstractConvexSet{Float64},1},Array{Float64,1},Array{Float64,1},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}},MathOptInterface.Utilities.IndexMap,Dict{Int64,UnitRange{Int64}},Type{MathOptInterface.VectorAffineFunction{Float64}},Type{MathOptInterface.ExponentialCone}})
precompile(Tuple{typeof(COSMO.processconstraints!),Tuple{Array{Int64,1},Array{Int64,1},Array{Float64,1}},Array{Float64,1},Array{COSMO.AbstractConvexSet{Float64},1},Array{Float64,1},Array{Float64,1},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}},MathOptInterface.Utilities.IndexMap,Dict{Int64,UnitRange{Int64}},Type{MathOptInterface.VectorAffineFunction{Float64}},Type{MathOptInterface.Nonnegatives}})
precompile(Tuple{typeof(COSMO.processconstraints!),Tuple{Array{Int64,1},Array{Int64,1},Array{Float64,1}},Array{Float64,1},Array{COSMO.AbstractConvexSet{Float64},1},Array{Float64,1},Array{Float64,1},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}},MathOptInterface.Utilities.IndexMap,Dict{Int64,UnitRange{Int64}},Type{MathOptInterface.VectorAffineFunction{Float64}},Type{MathOptInterface.PositiveSemidefiniteConeTriangle}})
precompile(Tuple{typeof(COSMO.processconstraints!),Tuple{Array{Int64,1},Array{Int64,1},Array{Float64,1}},Array{Float64,1},Array{COSMO.AbstractConvexSet{Float64},1},Array{Float64,1},Array{Float64,1},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}},MathOptInterface.Utilities.IndexMap,Dict{Int64,UnitRange{Int64}},Type{MathOptInterface.VectorAffineFunction{Float64}},Type{MathOptInterface.SecondOrderCone}})
precompile(Tuple{typeof(COSMO.processconstraints!),Tuple{Array{Int64,1},Array{Int64,1},Array{Float64,1}},Array{Float64,1},Array{COSMO.AbstractConvexSet{Float64},1},Array{Float64,1},Array{Float64,1},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}},MathOptInterface.Utilities.IndexMap,Dict{Int64,UnitRange{Int64}},Type{MathOptInterface.VectorAffineFunction{Float64}},Type{MathOptInterface.Zeros}})
precompile(Tuple{typeof(COSMO.rectify_scaling!),SubArray{Float64,1,Array{Float64,1},Tuple{UnitRange{Int64}},true},SubArray{Float64,1,Array{Float64,1},Tuple{UnitRange{Int64}},true},COSMO.SecondOrderCone{Float64}})
precompile(Tuple{typeof(COSMO.scale_data!),SparseArrays.SparseMatrixCSC{Float64,Int64},SparseArrays.SparseMatrixCSC{Float64,Int64},Array{Float64,1},Array{Float64,1},Diagonal{Float64,Array{Float64,1}},Diagonal{Float64,Array{Float64,1}},Float64})
precompile(Tuple{typeof(COSMO.scale_data!),SparseArrays.SparseMatrixCSC{Float64,Int64},SparseArrays.SparseMatrixCSC{Float64,Int64},Array{Float64,1},Array{Float64,1},LinearAlgebra.UniformScaling{Bool},Diagonal{Float64,Array{Float64,1}},Float64})
precompile(Tuple{typeof(MathOptInterface.Bridges.Objective.add_all_bridges),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},Type})
precompile(Tuple{typeof(MathOptInterface.Bridges.Variable.add_all_bridges),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},Type})
precompile(Tuple{typeof(MathOptInterface.Utilities._pass_attributes),Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}},Bool,MathOptInterface.Utilities.IndexMap,Array{MathOptInterface.AbstractConstraintAttribute,1},Tuple{DataType},Tuple{Array{MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.ExponentialCone},1}},Tuple{Array{MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.ExponentialCone},1}},typeof(MathOptInterface.Utilities.load)})
precompile(Tuple{typeof(MathOptInterface.Utilities._pass_attributes),Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}},Bool,MathOptInterface.Utilities.IndexMap,Array{MathOptInterface.AbstractConstraintAttribute,1},Tuple{DataType},Tuple{Array{MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.Nonnegatives},1}},Tuple{Array{MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.Nonnegatives},1}},typeof(MathOptInterface.Utilities.load)})
precompile(Tuple{typeof(MathOptInterface.Utilities._pass_attributes),Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}},Bool,MathOptInterface.Utilities.IndexMap,Array{MathOptInterface.AbstractConstraintAttribute,1},Tuple{DataType},Tuple{Array{MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.PositiveSemidefiniteConeTriangle},1}},Tuple{Array{MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.PositiveSemidefiniteConeTriangle},1}},typeof(MathOptInterface.Utilities.load)})
precompile(Tuple{typeof(MathOptInterface.Utilities._pass_attributes),Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}},Bool,MathOptInterface.Utilities.IndexMap,Array{MathOptInterface.AbstractConstraintAttribute,1},Tuple{DataType},Tuple{Array{MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.SecondOrderCone},1}},Tuple{Array{MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.SecondOrderCone},1}},typeof(MathOptInterface.Utilities.load)})
precompile(Tuple{typeof(MathOptInterface.Utilities._pass_attributes),Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}},Bool,MathOptInterface.Utilities.IndexMap,Array{MathOptInterface.AbstractConstraintAttribute,1},Tuple{DataType},Tuple{Array{MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.Zeros},1}},Tuple{Array{MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.Zeros},1}},typeof(MathOptInterface.Utilities.load)})
precompile(Tuple{typeof(MathOptInterface.Utilities.load),Optimizer,MathOptInterface.ObjectiveFunction{MathOptInterface.SingleVariable},MathOptInterface.SingleVariable})
precompile(Tuple{typeof(MathOptInterface.add_variables),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},Int64})
precompile(Tuple{typeof(MathOptInterface.get),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},MathOptInterface.ConstraintDual,MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.Nonnegatives}})
precompile(Tuple{typeof(MathOptInterface.get),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},MathOptInterface.ConstraintDual,MathOptInterface.ConstraintIndex{MathOptInterface.VectorAffineFunction{Float64},MathOptInterface.Zeros}})
precompile(Tuple{typeof(MathOptInterface.get),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},MathOptInterface.ObjectiveValue})
precompile(Tuple{typeof(copy),Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{1},Tuple{Base.OneTo{Int64}},typeof(MathOptInterface.add_constraint),Tuple{Base.RefValue{MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}}},Array{Union{MathOptInterface.SingleVariable, MathOptInterface.VectorAffineFunction{Float64}},1},Array{Any,1}}}})
precompile(Tuple{typeof(empty_model!),COSMO.Workspace{Float64}})
precompile(Tuple{typeof(setproperty!),COSMO.ProblemData{Float64},Symbol,SparseArrays.SparseMatrixCSC{Float64,Int64}})
end

0 comments on commit 264294d

Please sign in to comment.