Skip to content

Commit 264294d

Browse files
authored
Add precompile statements (#109)
- 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
1 parent 1b8c58c commit 264294d

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

src/COSMO.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,7 @@ include("./solver.jl")
3838
include("./interface.jl")
3939
include("./MOIWrapper.jl")
4040

41+
include("precompile.jl")
42+
_precompile_()
4143

4244
end #end module

src/precompile.jl

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
function _precompile_()
2+
ccall(:jl_generating_output, Cint, ()) == 1 || return nothing
3+
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}}})
4+
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}}})
5+
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}}})
6+
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}}})
7+
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}}})
8+
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}}})
9+
precompile(Tuple{Type{CholmodKKTSolver},SparseArrays.SparseMatrixCSC{Float64,Int64},SparseArrays.SparseMatrixCSC{Float64,Int64},Float64,Array{Float64,1}})
10+
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})
11+
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})
12+
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})
13+
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})
14+
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})
15+
16+
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}})
17+
precompile(Tuple{typeof(COSMO.apply_sense!),MathOptInterface.OptimizationSense,SparseArrays.SparseMatrixCSC{Float64,Int64},Array{Float64,1},Float64})
18+
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}})
19+
precompile(Tuple{typeof(COSMO.kkt_col_norms!),SparseArrays.SparseMatrixCSC{Float64,Int64},SparseArrays.SparseMatrixCSC{Float64,Int64},Array{Float64,1},Array{Float64,1}})
20+
precompile(Tuple{typeof(COSMO.optimize!),COSMO.Workspace{Float64}})
21+
precompile(Tuple{typeof(COSMO.pass_attributes!),Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}},MathOptInterface.Utilities.IndexMap,Function})
22+
precompile(Tuple{typeof(COSMO.pre_allocate_variables!),COSMO.Workspace{Float64}})
23+
precompile(Tuple{typeof(COSMO.primal_kkt_condition!),Array{Float64,1},SparseArrays.SparseMatrixCSC{Float64,Int64},Array{Float64,1},COSMO.SplitVector{Float64},Array{Float64,1}})
24+
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}})
25+
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}})
26+
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}})
27+
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}})
28+
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}})
29+
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}})
30+
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})
31+
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})
32+
precompile(Tuple{typeof(MathOptInterface.Bridges.Objective.add_all_bridges),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},Type})
33+
precompile(Tuple{typeof(MathOptInterface.Bridges.Variable.add_all_bridges),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},Type})
34+
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)})
35+
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)})
36+
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)})
37+
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)})
38+
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)})
39+
precompile(Tuple{typeof(MathOptInterface.Utilities.load),Optimizer,MathOptInterface.ObjectiveFunction{MathOptInterface.SingleVariable},MathOptInterface.SingleVariable})
40+
precompile(Tuple{typeof(MathOptInterface.add_variables),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},Int64})
41+
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}})
42+
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}})
43+
precompile(Tuple{typeof(MathOptInterface.get),MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Optimizer,MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}},MathOptInterface.ObjectiveValue})
44+
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}}}})
45+
precompile(Tuple{typeof(empty_model!),COSMO.Workspace{Float64}})
46+
precompile(Tuple{typeof(setproperty!),COSMO.ProblemData{Float64},Symbol,SparseArrays.SparseMatrixCSC{Float64,Int64}})
47+
end

0 commit comments

Comments
 (0)