Performance

Measurements.jl strives to be as fast as possible. These are the benchmark results obtained with the BenchmarkTools.jl suite on a system equipped with an Intel(R) Core(TM) i7-4700MQ CPU.

using BenchmarkTools

# Creation of a `Measurement` object
julia> @benchmark 4.7 ± 0.3
BenchmarkTools.Trial:
  samples:          10000
  evals/sample:     996
  time tolerance:   5.00%
  memory tolerance: 1.00%
  memory estimate:  144.00 bytes
  allocs estimate:  3
  minimum time:     24.00 ns (0.00% GC)
  median time:      30.00 ns (0.00% GC)
  mean time:        36.13 ns (16.00% GC)
  maximum time:     1.53 μs (96.21% GC)

# Sum of two `Measurement` objects
julia> a = 12.3 ± 4.5; b = 67.8 ± 9.0;

julia> @benchmark a + b
BenchmarkTools.Trial:
  samples:          10000
  evals/sample:     199
  time tolerance:   5.00%
  memory tolerance: 1.00%
  memory estimate:  624.00 bytes
  allocs estimate:  15
  minimum time:     424.00 ns (0.00% GC)
  median time:      433.00 ns (0.00% GC)
  mean time:        504.87 ns (12.33% GC)
  maximum time:     14.03 μs (95.58% GC)

# One-argument functions, where functional
# correlation is not a concern, are even faster
julia> @benchmark sqrt(b)
BenchmarkTools.Trial:
  samples:          10000
  evals/sample:     947
  time tolerance:   5.00%
  memory tolerance: 1.00%
  memory estimate:  96.00 bytes
  allocs estimate:  2
  minimum time:     97.00 ns (0.00% GC)
  median time:      99.00 ns (0.00% GC)
  mean time:        106.15 ns (5.12% GC)
  maximum time:     1.79 μs (93.36% GC)

julia> @benchmark sin(a)
BenchmarkTools.Trial:
  samples:          10000
  evals/sample:     891
  time tolerance:   5.00%
  memory tolerance: 1.00%
  memory estimate:  96.00 bytes
  allocs estimate:  2
  minimum time:     127.00 ns (0.00% GC)
  median time:      129.00 ns (0.00% GC)
  mean time:        135.90 ns (4.06% GC)
  maximum time:     2.00 μs (91.82% GC)

julia> @benchmark gamma(a)
BenchmarkTools.Trial:
  samples:          10000
  evals/sample:     570
  time tolerance:   5.00%
  memory tolerance: 1.00%
  memory estimate:  96.00 bytes
  allocs estimate:  2
  minimum time:     205.00 ns (0.00% GC)
  median time:      206.00 ns (0.00% GC)
  mean time:        219.57 ns (4.57% GC)
  maximum time:     5.31 μs (95.05% GC)

# Vectorial functions take an almost linear time
julia> vector = [rand() ± 0.1rand() for _ in 1:10000];

julia> @benchmark sqrt.(vector)
BenchmarkTools.Trial:
  samples:          2322
  evals/sample:     1
  time tolerance:   5.00%
  memory tolerance: 1.00%
  memory estimate:  2.37 mb
  allocs estimate:  50027
  minimum time:     1.76 ms (0.00% GC)
  median time:      1.84 ms (0.00% GC)
  mean time:        2.15 ms (13.57% GC)
  maximum time:     5.47 ms (58.76% GC)

julia> @benchmark sin.(vector)
BenchmarkTools.Trial:
  samples:          2238
  evals/sample:     1
  time tolerance:   5.00%
  memory tolerance: 1.00%
  memory estimate:  2.37 mb
  allocs estimate:  50027
  minimum time:     1.80 ms (0.00% GC)
  median time:      1.89 ms (0.00% GC)
  mean time:        2.23 ms (14.65% GC)
  maximum time:     5.59 ms (64.94% GC)

julia> @benchmark gamma.(vector)
BenchmarkTools.Trial:
  samples:          1656
  evals/sample:     1
  time tolerance:   5.00%
  memory tolerance: 1.00%
  memory estimate:  2.37 mb
  allocs estimate:  50027
  minimum time:     2.64 ms (0.00% GC)
  median time:      2.71 ms (0.00% GC)
  mean time:        3.02 ms (9.44% GC)
  maximum time:     6.58 ms (43.25% GC)