From d161eca7aecfa81fb278a1f5ebbb64003bf984f4 Mon Sep 17 00:00:00 2001 From: Adriano Meligrana <68152031+Tortar@users.noreply.github.com> Date: Thu, 28 Nov 2024 23:55:57 +0100 Subject: [PATCH] Update multithreading_speedup.jl --- examples/multithreading_speedup.jl | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/examples/multithreading_speedup.jl b/examples/multithreading_speedup.jl index a8b96ec..1f9c573 100644 --- a/examples/multithreading_speedup.jl +++ b/examples/multithreading_speedup.jl @@ -1,13 +1,12 @@ # # Multithreading speedup for large models -# In this tutorial we illustrate how to make use of multi threading in BeforeIT to allow for faster -# executions of single simulation runs. +# In this tutorial we illustrate how to make use of multi threading in `BeforeIT.jl` +# to allow for faster executions of single simulation runs. import BeforeIT as Bit using FileIO, Plots, StatsPlots - -# We then initialise the model, this time we will use the Italy 2010Q1 scenario, +# First, we initialise the model, this time we use the Italy 2010Q1 scenario, # and we want to simulate the model for a large number of epochs parameters = Bit.ITALY2010Q1.parameters @@ -15,23 +14,25 @@ initial_conditions = Bit.ITALY2010Q1.initial_conditions T = 50 model = Bit.init_model(parameters, initial_conditions, T); - # The model is in scale 1:2000, so it has around 30,000 households +model.prop.H -println(model.prop.H) - -# Note that households are the sum of active and inactive households and the owners of firms and of the bank -println(length(model.w_act) + length(model.w_inact) + length(model.firms) + 1) +# Note that the households number is actually the sum of active and +# inactive households, the owners of firms and of the bank +length(model.w_act) + length(model.w_inact) + length(model.firms) + 1 # Let's fist check how many threads we have available in this Julia session +Threads.nthreads() -println(Threads.nthreads()) +# Then we need to first compile the code not to count compilation time, +# we can do that just by executing the function one time +Bit.run_one_sim!(model; multi_threading = false) # Let's now compare the performance of single threading and multi threading - +model = Bit.init_model(parameters, initial_conditions, T); @time data = Bit.run_one_sim!(model; multi_threading = false); model = Bit.init_model(parameters, initial_conditions, T); @time data = Bit.run_one_sim!(model; multi_threading = true); -# Is the speedup in line to what we would expect? +# Is the speedup in line to what we would expect? Yes!