Skip to content

Commit 0f42443

Browse files
committed
test: make wide int benchmark more stable
1 parent 540d96c commit 0f42443

1 file changed

Lines changed: 53 additions & 18 deletions

File tree

Tools/scripts/bench_wide_int_pyperf.py

Lines changed: 53 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,70 @@
11
"""Microbenchmark compact vs wide int add/sub with pyperf.
22
3-
Use this with PYTHON_JIT=0 and -S if you want a stable interpreter-only run:
3+
Use this with PYTHON_JIT=0 for a stable interpreter-only run:
44
5-
PYTHON_JIT=0 ./python.exe -S Tools/scripts/bench_wide_int_pyperf.py
5+
PYTHON_JIT=0 ./python.exe Tools/scripts/bench_wide_int_pyperf.py
66
"""
77

88
from __future__ import annotations
99

1010
import pyperf
1111

12+
_BATCH = 10_000
13+
_sink = 0
1214

13-
def bench_add_compact() -> int:
14-
a = 1
15-
b = 2
16-
return a + b
1715

16+
def _bench_add(a: int, b: int) -> None:
17+
global _sink
18+
x = 0
19+
for _ in range(_BATCH):
20+
x = a + b
21+
_sink = x
1822

19-
def bench_add_wide() -> int:
20-
a = 10_000_000_000
21-
b = 1
22-
return a + b
2323

24+
def _bench_sub(a: int, b: int) -> None:
25+
global _sink
26+
x = 0
27+
for _ in range(_BATCH):
28+
x = a - b
29+
_sink = x
2430

25-
def bench_sub_compact() -> int:
26-
a = 1
27-
b = 2
28-
return a - b
2931

32+
def bench_add_compact() -> None:
33+
_bench_add(1, 2)
3034

31-
def bench_sub_wide() -> int:
32-
a = 10_000_000_000
33-
b = 1
34-
return a - b
35+
36+
def bench_add_wide() -> None:
37+
_bench_add(1 << 40, 1)
38+
39+
40+
def bench_sub_compact() -> None:
41+
_bench_sub(1, 2)
42+
43+
44+
def bench_sub_wide() -> None:
45+
_bench_sub(1 << 40, 1)
46+
47+
48+
def bench_chain_compact() -> None:
49+
global _sink
50+
total = 0
51+
a = 2000
52+
b = 3
53+
c = 4000
54+
for _ in range(_BATCH):
55+
total += a * b + c
56+
_sink = total
57+
58+
59+
def bench_chain_wide() -> None:
60+
global _sink
61+
total = 0
62+
a = 1 << 40
63+
b = 3
64+
c = 1 << 20
65+
for _ in range(_BATCH):
66+
total += a * b + c
67+
_sink = total
3568

3669

3770
def main() -> None:
@@ -40,6 +73,8 @@ def main() -> None:
4073
runner.bench_func("add_wide", bench_add_wide)
4174
runner.bench_func("sub_compact", bench_sub_compact)
4275
runner.bench_func("sub_wide", bench_sub_wide)
76+
runner.bench_func("chain_compact", bench_chain_compact)
77+
runner.bench_func("chain_wide", bench_chain_wide)
4378

4479

4580
if __name__ == "__main__":

0 commit comments

Comments
 (0)