BenchmarkConfigSweeps.jl can be used for running benchmarks over various
--nthreads settings, environment variables, and julia versions.
Each configuration is specified as a combination of configuration specifiers
such as BenchmarkConfigSweeps.nthreads, BenchmarkConfigSweeps.env, and
BenchmarkConfigSweeps.julia. The set of configurations to run benchmarks is
simply an iterable of (tuples of) such configuration specifiers:
using BenchmarkConfigSweeps
nthreads_list = [1, 4, 8, 16]
configs = Iterators.product(
zip(
BenchmarkConfigSweeps.nthreads.(nthreads_list),
BenchmarkConfigSweeps.env.("OPENBLAS_NUM_THREADS" .=> nthreads_list),
),
BenchmarkConfigSweeps.env.(
"JULIA_PROJECT" .=> ["baseline", "target"],
"JULIA_LOAD_PATH" => "@", # not varied
),
BenchmarkConfigSweeps.julia.(["julia1.5", "julia1.6"]),
)It can be then passed to BenchmarkConfigSweeps.run:
BenchmarkConfigSweeps.run("build", "benchmarks.jl", configs)where "build" is the directory to store the result and "benchmarks.jl" is
the Julia script that defines the variable SUITE :: BenchmarkGroup at the
top-level.
The result can be loaded using
sweepresult = BenchmarkConfigSweeps.load("build")The sweepresult object implements the Tables.jl interface. For example, it can
be easily converted into a DataFrame by
using DataFrames
df = DataFrame(sweepresult)Note that the default table conversion is rather too DWIM-y in that it tries to
guess the meaning of BenchmarkGroup keys. For more information, see
BenchmarkConfigSweeps.flattable for how it works. Use
BenchmarkConfigSweeps.simpletable for programmatic processing.