Skip to content

Instantly share code, notes, and snippets.

@methane
Last active May 16, 2022 11:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save methane/9d2a35a519d89e657454f278e49fd4ae to your computer and use it in GitHub Desktop.
Save methane/9d2a35a519d89e657454f278e49fd4ae to your computer and use it in GitHub Desktop.
dict benchmark
#!/usr/bin/env python3
import pyperf
def build_dict_str(n):
mydict = {str(k): k for k in range(n)}
return mydict, list(mydict)
def build_dict_int(n):
mydict = {k: k for k in range(n)}
return mydict, list(mydict)
def bench_dict(loops, mydict, keys):
range_it = range(loops)
t0 = pyperf.perf_counter()
for loops in range_it:
for k in keys:
mydict[k]
mydict[k]
mydict[k]
mydict[k]
mydict[k]
mydict[k]
mydict[k]
mydict[k]
mydict[k]
mydict[k]
return pyperf.perf_counter() - t0
runner = pyperf.Runner()
# inner-loops: dict[str] is duplicated 10 times
runner.bench_time_func('dict[str, 10]', bench_dict, *build_dict_str(10), inner_loops=10*10)
runner.bench_time_func('dict[str, 1,000]', bench_dict, *build_dict_str(1000), inner_loops=10*1000)
runner.bench_time_func('dict[str, 1,000,000]', bench_dict, *build_dict_str(1000_000), inner_loops=10*1000_000)
runner.bench_time_func('dict[int, 10]', bench_dict, *build_dict_int(10), inner_loops=10*10)
runner.bench_time_func('dict[int, 1,000]', bench_dict, *build_dict_int(1000), inner_loops=10*1000)
runner.bench_time_func('dict[int, 1,000,000]', bench_dict, *build_dict_int(1000_000), inner_loops=10*1000_000)
@methane
Copy link
Author

methane commented Feb 22, 2022

Swisstable hash: methane/cpython#41

Benchmark main swiss
dict[str, 10] 20.8 ns 23.2 ns: 1.11x slower
dict[str, 1,000] 20.6 ns 22.5 ns: 1.09x slower
dict[str, 1,000,000] 30.2 ns 27.9 ns: 1.08x faster
dict[int, 10] 20.2 ns 23.6 ns: 1.16x slower
dict[int, 1,000] 19.7 ns 23.4 ns: 1.18x slower
dict[int, 1,000,000] 21.0 ns 24.5 ns: 1.17x slower
Geometric mean (ref) 1.10x slower

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment