Mojo package
benchmark
Performance benchmarking: statistical analysis and detailed reports.
The benchmark package provides tools for measuring and analyzing the
performance of Mojo code. It enables statistical benchmarking with automatic
warmup, batch execution, and comprehensive reporting including mean, min, max,
and total time statistics across multiple runs.
You can import these APIs from the benchmark package. For example:
import benchmark
from time import sleepYou can pass any fn as a parameter into benchmark.run[...](), it will return
a Report where you can get the mean, duration, max, and more:
fn sleeper():
sleep(.01)
var report = benchmark.run[sleeper]()
print(report.mean())0.012256487394957985You can print a full report:
report.print()---------------------
Benchmark Report (s)
---------------------
Mean: 0.012265747899159664
Total: 1.459624
Iters: 119
Warmup Mean: 0.01251
Warmup Total: 0.025020000000000001
Warmup Iters: 2
Fastest Mean: 0.0121578
Slowest Mean: 0.012321428571428572
Or all the batch runs:
report.print_full()---------------------
Benchmark Report (s)
---------------------
Mean: 0.012368649122807017
Total: 1.410026
Iters: 114
Warmup Mean: 0.0116705
Warmup Total: 0.023341000000000001
Warmup Iters: 2
Fastest Mean: 0.012295586956521738
Slowest Mean: 0.012508099999999999
Batch: 1
Iterations: 20
Mean: 0.012508099999999999
Duration: 0.250162
Batch: 2
Iterations: 46
Mean: 0.012295586956521738
Duration: 0.56559700000000002
Batch: 3
Iterations: 48
Mean: 0.012380562499999999
Duration: 0.59426699999999999If you want to use a different time unit you can bring in the Unit and pass it in as an argument:
from benchmark import Unit
report.print(Unit.ms)---------------------
Benchmark Report (ms)
---------------------
Mean: 0.012312411764705882
Total: 1.465177
Iters: 119
Warmup Mean: 0.012505499999999999
Warmup Total: 0.025010999999999999
Warmup Iters: 2
Fastest Mean: 0.012015649999999999
Slowest Mean: 0.012421204081632654The unit's are just aliases for string constants, so you can for example:
print(report.mean("ms"))12.199145299145298Benchmark.run takes four arguments to change the behaviour, to set warmup iterations to 5:
r = benchmark.run[sleeper](5)0.012004808080808081To set 1 warmup iteration, 2 max iterations, a min total time of 3 sec, and a max total time of 4 s:
r = benchmark.run[sleeper](1, 2, 3, 4)Note that the min total time will take precedence over max iterations
Modules
-
bencher: Implements comprehensive benchmarking infrastructure with statistical analysis. -
benchmark: Implements the benchmark module for runtime benchmarking. -
compiler: Provides compiler hints to prevent optimization of benchmark code. -
memory: Provides memory barrier utilities for preventing compiler optimizations. -
quick_bench: Provides simplified benchmarking interface with automatic boilerplate handling.
Was this page helpful?
Thank you! We'll create more content like this.
Thank you for helping us improve!