From 8cd3b440da73b4f60181acf6ff51e1c473e66ba3 Mon Sep 17 00:00:00 2001 From: Monssaf Toukal Date: Thu, 25 Aug 2022 12:37:58 -0400 Subject: [PATCH 1/2] bmark solvers in parallel --- Project.toml | 1 + src/SolverBenchmark.jl | 1 + src/bmark_solvers.jl | 20 ++++++++++++++++---- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/Project.toml b/Project.toml index c6c0fe4c..eaac17d4 100644 --- a/Project.toml +++ b/Project.toml @@ -7,6 +7,7 @@ BenchmarkProfiles = "ecbce9bc-3e5e-569d-9e29-55181f61f8d0" BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b" GitHub = "bc5e4493-9b4d-5f90-b8aa-2b2bcaad7a26" JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819" JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" diff --git a/src/SolverBenchmark.jl b/src/SolverBenchmark.jl index 8140ff26..f8dccb73 100644 --- a/src/SolverBenchmark.jl +++ b/src/SolverBenchmark.jl @@ -1,5 +1,6 @@ module SolverBenchmark +using Distributed using Logging using Printf diff --git a/src/bmark_solvers.jl b/src/bmark_solvers.jl index 6d921d8d..5c6f6002 100644 --- a/src/bmark_solvers.jl +++ b/src/bmark_solvers.jl @@ -13,13 +13,25 @@ Run a set of solvers on a set of problems. Any keyword argument accepted by `solve_problems` #### Return value -A Dict{Symbol, AbstractExecutionStats} of statistics. +A Dict{Symbol, DataFrame} of statistics. """ function bmark_solvers(solvers::Dict{Symbol, <:Any}, args...; kwargs...) stats = Dict{Symbol, DataFrame}() - for (name, solver) in solvers - @debug "running" name solver - stats[name] = solve_problems(solver, args...; kwargs...) + if length(procs()) > 1 + @info "bmark solvers in parallel" + future_stats = Dict{Symbol, Future}() + @sync for (name, solver) in solvers + @debug "running" name solver + @async future_stats[name] = @spawnat :any solve_problems(solver, args...; kwargs...) + end + @sync for (name, future) in future_stats + @async stats[name] = fetch(future) + end + else + for (name, solver) in solvers + @debug "running" name solver + stats[name] = solve_problems(solver, args...; kwargs...) + end end return stats end From e793fd5e4b02049b3ebf626e6f8afbff1ddda70b Mon Sep 17 00:00:00 2001 From: Monssaf Toukal Date: Mon, 5 Sep 2022 13:21:41 -0400 Subject: [PATCH 2/2] bmark solvers in parallel using addprocs --- src/bmark_solvers.jl | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/bmark_solvers.jl b/src/bmark_solvers.jl index 5c6f6002..20de5ab6 100644 --- a/src/bmark_solvers.jl +++ b/src/bmark_solvers.jl @@ -15,14 +15,16 @@ Any keyword argument accepted by `solve_problems` #### Return value A Dict{Symbol, DataFrame} of statistics. """ -function bmark_solvers(solvers::Dict{Symbol, <:Any}, args...; kwargs...) +function bmark_solvers(solvers::Dict{Symbol, <:Any}, args...;parallel_eval=false, kwargs...) stats = Dict{Symbol, DataFrame}() - if length(procs()) > 1 + if parallel_eval && length(procs()) > 1 @info "bmark solvers in parallel" future_stats = Dict{Symbol, Future}() @sync for (name, solver) in solvers - @debug "running" name solver - @async future_stats[name] = @spawnat :any solve_problems(solver, args...; kwargs...) + @async future_stats[name] = @spawnat :any begin + @info "worker $(myid()) running solver $(name)" + solve_problems(solver, args...; kwargs...) + end end @sync for (name, future) in future_stats @async stats[name] = fetch(future)