diff options
author | Ken Kellner <ken@kenkellner.com> | 2020-02-12 20:30:50 -0500 |
---|---|---|
committer | Ken Kellner <ken@kenkellner.com> | 2020-02-12 20:30:50 -0500 |
commit | 4594e4705e91d8245fc27010c93e21c783920e7a (patch) | |
tree | baad0da0f64365fd1261e349df19d569b1354148 | |
parent | 7f970a87931bb4276ab7a190e82f0d8a5d6bfdf8 (diff) |
Enable parallel execution of bootstraps and multi-model runs
-rw-r--r-- | .travis.yml | 3 | ||||
-rw-r--r-- | examples/example_parallel.jl | 31 | ||||
-rw-r--r-- | src/Unmarked.jl | 2 | ||||
-rw-r--r-- | src/gof.jl | 5 | ||||
-rw-r--r-- | src/nmix.jl | 5 | ||||
-rw-r--r-- | src/occupancy.jl | 5 |
6 files changed, 11 insertions, 40 deletions
diff --git a/.travis.yml b/.travis.yml index 17165c9..ade2244 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,6 @@ language: julia julia: - nightly - - 1.2 - - 1.1 + - 1.3 codecov: true diff --git a/examples/example_parallel.jl b/examples/example_parallel.jl deleted file mode 100644 index 68eee4c..0000000 --- a/examples/example_parallel.jl +++ /dev/null @@ -1,31 +0,0 @@ -#export JULIA_NUM_THREADS=3 #in bash -Threads.nthreads() #should be >1 - -using Distributed, DataFrames -addprocs(3); -@everywhere using Unmarked - - - -ψ_formula = @formula(ψ~elev+forest); -p_formula = @formula(p~precip+wind); -β_truth = [0, -0.5, 1.2, -0.2, 0, 0.7]; - -umd = simulate(Occu, ψ_formula, p_formula, [1000, 5], β_truth); - -fit = occu(ψ_formula, p_formula, umd); - - -#bootstrap - -@everywhere function calc_stat(i, fit::Unmarked.UnmarkedModel) - s = simulate(fit) - sum(s.y) -end - -@everywhere calc_stat2 = calc_stat2 - -@time y = map(x -> calc_stat(x, fit), 1:5000); - -@time y2 = pmap(x -> calc_stat(x, fit), 1:5000); - diff --git a/src/Unmarked.jl b/src/Unmarked.jl index 40d6ebe..4f192f8 100644 --- a/src/Unmarked.jl +++ b/src/Unmarked.jl @@ -4,7 +4,7 @@ using StatsBase, StatsModels, StatsFuns, Distributions, Random, Printf using LinearAlgebra, DataFrames, Optim, NLSolversBase, ForwardDiff using Combinatorics: combinations using PrettyTables: pretty_table, ft_printf -using ProgressMeter: @showprogress +using ProgressMeter: Progress, next! using Gadfly: plot, style, Guide, Geom, pt, vstack, hstack import Base: show, getindex, length @@ -9,11 +9,12 @@ end function parboot(fit::UnmarkedModel, nsims::Int, statistic::Any) out = Array{Float64}(undef, nsims) - - @showprogress 1 string("Bootstrap (",nsims," sims) ") for i = 1:nsims + p = Progress(nsims, desc=string("Bootstrap (",nsims," sims) ")) + Threads.@threads for i = 1:nsims new_data = simulate(fit) new_fit = update(fit, new_data) out[i] = statistic(new_fit) + next!(p) end return out diff --git a/src/nmix.jl b/src/nmix.jl index 33551ab..dd7e54d 100644 --- a/src/nmix.jl +++ b/src/nmix.jl @@ -85,10 +85,11 @@ function nmix(λ_form::Union{Array,FormulaTerm}, p_form::Union{Array,FormulaTerm}, data::UmData, K::Union{Int,Nothing}=nothing) cf = combine_formulas(λ_form, p_form) - msg = string("Fitting ", length(cf), " models ") out = Array{UnmarkedModel}(undef, length(cf)) - @showprogress 1 msg for i in 1:length(cf) + p = Progress(length(cf), desc=string("Fitting ", length(cf), " models ")) + Threads.@threads for i in 1:length(cf) out[i] = nmix(cf[i][1],cf[i][2], data, K) + next!(p) end return UnmarkedModels(out) end diff --git a/src/occupancy.jl b/src/occupancy.jl index ff18ac1..39fccca 100644 --- a/src/occupancy.jl +++ b/src/occupancy.jl @@ -64,10 +64,11 @@ combinations. To fit all model subsets, wrap formula with `allsubs()`. function occu(ψ_form::Union{Array,FormulaTerm}, p_form::Union{Array,FormulaTerm}, data::UmData) cf = combine_formulas(ψ_form, p_form) - msg = string("Fitting ", length(cf), " models ") out = Array{UnmarkedModel}(undef, length(cf)) - @showprogress 1 msg for i in 1:length(cf) + p = Progress(length(cf), desc=string("Fitting ", length(cf), " models ")) + Threads.@threads for i in 1:length(cf) out[i] = occu(cf[i][1], cf[i][2], data) + next!(p) end return UnmarkedModels(out) end |