From 9cb6b9a492f02f5f4f8ac4cfd136547f8d9eae2d Mon Sep 17 00:00:00 2001 From: Owen Carey <37121709+owenthcarey@users.noreply.github.com> Date: Tue, 8 Sep 2026 21:03:43 -0700 Subject: [PATCH 1/2] perf: speed up compilation and string processing --- .../census/2026-09-execution/environment.json | 15 + .../census/2026-09-execution/fresh-cache.json | 101 + .../census/2026-09-execution/probes.json | 2606 +++++++++ .../census/2026-09-execution/probes.py | 174 + .../2026-09-execution/scaling-long.json | 191 + .../census/2026-09-execution/scaling.json | 191 + .../census/2026-09-execution/scaling.py | 72 + .../census/2026-09-execution/suite.json | 4985 +++++++++++++++++ .../census/2026-09-execution/validation.json | 169 + .../census/2026-09-execution/warm.json | 1871 +++++++ crates/weavepy-compiler/src/flowgraph.rs | 10 +- crates/weavepy-compiler/src/intern.rs | 195 + crates/weavepy-compiler/src/lib.rs | 247 +- crates/weavepy-vm/src/builtins.rs | 82 +- crates/weavepy-vm/src/sync.rs | 53 +- crates/weavepy-vm/src/unicode_case.rs | 46 + docs/PERFORMANCE-EXECUTION.md | 216 + docs/PERFORMANCE.md | 3 + tests/regrtest/test_indexed_compilation.py | 25 + tests/regrtest/test_string_fastpaths.py | 75 + 20 files changed, 11144 insertions(+), 183 deletions(-) create mode 100644 crates/weavepy-bench/census/2026-09-execution/environment.json create mode 100644 crates/weavepy-bench/census/2026-09-execution/fresh-cache.json create mode 100644 crates/weavepy-bench/census/2026-09-execution/probes.json create mode 100644 crates/weavepy-bench/census/2026-09-execution/probes.py create mode 100644 crates/weavepy-bench/census/2026-09-execution/scaling-long.json create mode 100644 crates/weavepy-bench/census/2026-09-execution/scaling.json create mode 100644 crates/weavepy-bench/census/2026-09-execution/scaling.py create mode 100644 crates/weavepy-bench/census/2026-09-execution/suite.json create mode 100644 crates/weavepy-bench/census/2026-09-execution/validation.json create mode 100644 crates/weavepy-bench/census/2026-09-execution/warm.json create mode 100644 crates/weavepy-compiler/src/intern.rs create mode 100644 docs/PERFORMANCE-EXECUTION.md create mode 100644 tests/regrtest/test_indexed_compilation.py create mode 100644 tests/regrtest/test_string_fastpaths.py diff --git a/crates/weavepy-bench/census/2026-09-execution/environment.json b/crates/weavepy-bench/census/2026-09-execution/environment.json new file mode 100644 index 00000000..1741a138 --- /dev/null +++ b/crates/weavepy-bench/census/2026-09-execution/environment.json @@ -0,0 +1,15 @@ +{ + "baseline_commit": "971d75214077c07935710798b705ec50d5831860", + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "rustc": "rustc 1.98.1 (48a229cea 2026-09-01)", + "cpython": "Python 3.14.7", + "release_build": "cargo build --release -p weavepy-cli --bin weavepy", + "metric_notes": { + "suite": "Paired alternating-order subprocesses, one discarded cycle, original work sizes, both JIT and interpreter.", + "probes": "Interpreter only; seven measured cycles for kernels and 31 for startup, one discarded cycle.", + "rss": "Per-child peak resident memory; includes process startup.", + "time": "Workload timers exclude startup; startup probes use full-process wall time.", + "warm": "Seven measured cycles after one discarded cycle. Each subprocess invokes bench(n) once before timing a second invocation and records workload CPU time.", + "scaling": "Existing eight-thread fixture, five measured cycles and one discarded cycle, both binaries and both GIL modes. Work values are 1,000,000 and 3,000,000 per worker." + } +} diff --git a/crates/weavepy-bench/census/2026-09-execution/fresh-cache.json b/crates/weavepy-bench/census/2026-09-execution/fresh-cache.json new file mode 100644 index 00000000..a731cd38 --- /dev/null +++ b/crates/weavepy-bench/census/2026-09-execution/fresh-cache.json @@ -0,0 +1,101 @@ +{ + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "jit": false, + "binaries": { + "base": { + "path": "target/release/weavepy-perf-971d752", + "sha256": "70cbfdda4bbdbdb65f410ba47a1ff97321334a5bbc83258238656352e2a12e6e", + "bytes": 44120992 + }, + "new": { + "path": "target/release/weavepy", + "sha256": "2b1329038d4ce27eb493f77e8c945b235b49f914da54c2e9c021087bb08cc698", + "bytes": 44121520 + } + }, + "rows": { + "startup_fresh_cache": { + "samples": { + "base": [ + { + "wall_ns": 193050500, + "cpu_ns": 179736000, + "rss_bytes": 41287680 + }, + { + "wall_ns": 189455541, + "cpu_ns": 173756000, + "rss_bytes": 41254912 + }, + { + "wall_ns": 156323042, + "cpu_ns": 148456000, + "rss_bytes": 41385984 + }, + { + "wall_ns": 162310792, + "cpu_ns": 152377000, + "rss_bytes": 41222144 + }, + { + "wall_ns": 162057375, + "cpu_ns": 129710000, + "rss_bytes": 41369600 + }, + { + "wall_ns": 137692333, + "cpu_ns": 134576000, + "rss_bytes": 41385984 + }, + { + "wall_ns": 151019875, + "cpu_ns": 144905000, + "rss_bytes": 41353216 + } + ], + "new": [ + { + "wall_ns": 188494959, + "cpu_ns": 180177000, + "rss_bytes": 41320448 + }, + { + "wall_ns": 203161875, + "cpu_ns": 161567000, + "rss_bytes": 41123840 + }, + { + "wall_ns": 161070750, + "cpu_ns": 157689000, + "rss_bytes": 41123840 + }, + { + "wall_ns": 221094875, + "cpu_ns": 158624000, + "rss_bytes": 41304064 + }, + { + "wall_ns": 202301209, + "cpu_ns": 140813000, + "rss_bytes": 41238528 + }, + { + "wall_ns": 142881125, + "cpu_ns": 140097000, + "rss_bytes": 41189376 + }, + { + "wall_ns": 146420833, + "cpu_ns": 134097000, + "rss_bytes": 41238528 + } + ] + }, + "comparisons": { + "wall_ns": 1.0376839573195409, + "cpu_ns": 1.0409970008597098, + "rss_bytes": 0.9968316831683168 + } + } + } +} diff --git a/crates/weavepy-bench/census/2026-09-execution/probes.json b/crates/weavepy-bench/census/2026-09-execution/probes.json new file mode 100644 index 00000000..e0efae1e --- /dev/null +++ b/crates/weavepy-bench/census/2026-09-execution/probes.json @@ -0,0 +1,2606 @@ +{ + "platform": "macOS-26.6.2-arm64-arm-64bit-Mach-O", + "jit": false, + "binaries": { + "base": { + "path": "target/release/weavepy-perf-971d752", + "sha256": "70cbfdda4bbdbdb65f410ba47a1ff97321334a5bbc83258238656352e2a12e6e", + "bytes": 44120992 + }, + "new": { + "path": "target/release/weavepy", + "sha256": "2b1329038d4ce27eb493f77e8c945b235b49f914da54c2e9c021087bb08cc698", + "bytes": 44121520 + } + }, + "rows": { + "startup": { + "samples": { + "base": [ + { + "wall_ns": 38599250, + "cpu_ns": 35872000, + "rss_bytes": 29212672 + }, + { + "wall_ns": 39506916, + "cpu_ns": 36531000, + "rss_bytes": 29229056 + }, + { + "wall_ns": 41599875, + "cpu_ns": 38750000, + "rss_bytes": 29245440 + }, + { + "wall_ns": 43061000, + "cpu_ns": 40462000, + "rss_bytes": 29229056 + }, + { + "wall_ns": 40730417, + "cpu_ns": 37813000, + "rss_bytes": 29245440 + }, + { + "wall_ns": 42036416, + "cpu_ns": 39128000, + "rss_bytes": 29163520 + }, + { + "wall_ns": 46601416, + "cpu_ns": 44250000, + "rss_bytes": 29163520 + }, + { + "wall_ns": 46482875, + "cpu_ns": 43453000, + "rss_bytes": 29310976 + }, + { + "wall_ns": 47960750, + "cpu_ns": 44638000, + "rss_bytes": 29179904 + }, + { + "wall_ns": 46097500, + "cpu_ns": 42685000, + "rss_bytes": 29327360 + }, + { + "wall_ns": 45248375, + "cpu_ns": 42179000, + "rss_bytes": 29343744 + }, + { + "wall_ns": 45740292, + "cpu_ns": 42717000, + "rss_bytes": 29310976 + }, + { + "wall_ns": 47933875, + "cpu_ns": 44636000, + "rss_bytes": 29147136 + }, + { + "wall_ns": 48206500, + "cpu_ns": 44927000, + "rss_bytes": 29196288 + }, + { + "wall_ns": 48136958, + "cpu_ns": 44879000, + "rss_bytes": 29294592 + }, + { + "wall_ns": 52047666, + "cpu_ns": 48630000, + "rss_bytes": 29343744 + }, + { + "wall_ns": 45590917, + "cpu_ns": 42606000, + "rss_bytes": 29196288 + }, + { + "wall_ns": 45396250, + "cpu_ns": 43177000, + "rss_bytes": 29294592 + }, + { + "wall_ns": 42131875, + "cpu_ns": 39311000, + "rss_bytes": 29229056 + }, + { + "wall_ns": 41888209, + "cpu_ns": 38840000, + "rss_bytes": 29261824 + }, + { + "wall_ns": 41463916, + "cpu_ns": 38416000, + "rss_bytes": 29179904 + }, + { + "wall_ns": 43059125, + "cpu_ns": 39734000, + "rss_bytes": 29245440 + }, + { + "wall_ns": 41303042, + "cpu_ns": 38396000, + "rss_bytes": 29376512 + }, + { + "wall_ns": 41594917, + "cpu_ns": 38764000, + "rss_bytes": 29114368 + }, + { + "wall_ns": 39601917, + "cpu_ns": 36740000, + "rss_bytes": 29196288 + }, + { + "wall_ns": 40957584, + "cpu_ns": 38037000, + "rss_bytes": 29278208 + }, + { + "wall_ns": 41955417, + "cpu_ns": 39041000, + "rss_bytes": 29212672 + }, + { + "wall_ns": 44324041, + "cpu_ns": 41479000, + "rss_bytes": 29327360 + }, + { + "wall_ns": 42098125, + "cpu_ns": 39094000, + "rss_bytes": 29261824 + }, + { + "wall_ns": 41939625, + "cpu_ns": 39006000, + "rss_bytes": 29245440 + }, + { + "wall_ns": 41205958, + "cpu_ns": 38201000, + "rss_bytes": 29130752 + } + ], + "new": [ + { + "wall_ns": 38235625, + "cpu_ns": 35596000, + "rss_bytes": 29130752 + }, + { + "wall_ns": 41038958, + "cpu_ns": 37941000, + "rss_bytes": 29114368 + }, + { + "wall_ns": 41765125, + "cpu_ns": 38787000, + "rss_bytes": 29081600 + }, + { + "wall_ns": 40932542, + "cpu_ns": 37850000, + "rss_bytes": 29081600 + }, + { + "wall_ns": 39948792, + "cpu_ns": 37022000, + "rss_bytes": 29081600 + }, + { + "wall_ns": 42252959, + "cpu_ns": 39486000, + "rss_bytes": 29229056 + }, + { + "wall_ns": 46169584, + "cpu_ns": 43158000, + "rss_bytes": 29130752 + }, + { + "wall_ns": 48202833, + "cpu_ns": 46224000, + "rss_bytes": 29179904 + }, + { + "wall_ns": 49776417, + "cpu_ns": 46303000, + "rss_bytes": 29032448 + }, + { + "wall_ns": 45613417, + "cpu_ns": 42722000, + "rss_bytes": 29097984 + }, + { + "wall_ns": 47284959, + "cpu_ns": 43968000, + "rss_bytes": 28999680 + }, + { + "wall_ns": 46696875, + "cpu_ns": 43065000, + "rss_bytes": 29212672 + }, + { + "wall_ns": 44340333, + "cpu_ns": 41465000, + "rss_bytes": 29196288 + }, + { + "wall_ns": 49325917, + "cpu_ns": 45829000, + "rss_bytes": 29147136 + }, + { + "wall_ns": 49217334, + "cpu_ns": 46052000, + "rss_bytes": 29179904 + }, + { + "wall_ns": 46783459, + "cpu_ns": 43575000, + "rss_bytes": 29081600 + }, + { + "wall_ns": 46406125, + "cpu_ns": 42990000, + "rss_bytes": 29130752 + }, + { + "wall_ns": 42591125, + "cpu_ns": 39443000, + "rss_bytes": 28999680 + }, + { + "wall_ns": 41507083, + "cpu_ns": 38663000, + "rss_bytes": 29130752 + }, + { + "wall_ns": 41277125, + "cpu_ns": 38475000, + "rss_bytes": 29196288 + }, + { + "wall_ns": 41855875, + "cpu_ns": 38908000, + "rss_bytes": 29016064 + }, + { + "wall_ns": 41046333, + "cpu_ns": 38039000, + "rss_bytes": 29065216 + }, + { + "wall_ns": 40627250, + "cpu_ns": 37785000, + "rss_bytes": 29032448 + }, + { + "wall_ns": 40336417, + "cpu_ns": 37879000, + "rss_bytes": 29114368 + }, + { + "wall_ns": 40242791, + "cpu_ns": 37392000, + "rss_bytes": 29130752 + }, + { + "wall_ns": 39106834, + "cpu_ns": 36301000, + "rss_bytes": 29032448 + }, + { + "wall_ns": 39588667, + "cpu_ns": 36626000, + "rss_bytes": 29147136 + }, + { + "wall_ns": 41950792, + "cpu_ns": 39012000, + "rss_bytes": 29032448 + }, + { + "wall_ns": 39391875, + "cpu_ns": 36684000, + "rss_bytes": 28983296 + }, + { + "wall_ns": 41457083, + "cpu_ns": 38462000, + "rss_bytes": 29048832 + }, + { + "wall_ns": 42061959, + "cpu_ns": 38507000, + "rss_bytes": 29016064 + } + ], + "cpython": [ + { + "wall_ns": 28053625, + "cpu_ns": 24955000, + "rss_bytes": 15007744 + }, + { + "wall_ns": 30114125, + "cpu_ns": 27142000, + "rss_bytes": 15007744 + }, + { + "wall_ns": 31262417, + "cpu_ns": 28043000, + "rss_bytes": 15007744 + }, + { + "wall_ns": 30307125, + "cpu_ns": 26980000, + "rss_bytes": 14974976 + }, + { + "wall_ns": 29029250, + "cpu_ns": 25952000, + "rss_bytes": 15007744 + }, + { + "wall_ns": 32762750, + "cpu_ns": 29326000, + "rss_bytes": 14991360 + }, + { + "wall_ns": 33194208, + "cpu_ns": 30006000, + "rss_bytes": 15040512 + }, + { + "wall_ns": 33642209, + "cpu_ns": 30439000, + "rss_bytes": 15024128 + }, + { + "wall_ns": 36480875, + "cpu_ns": 33682000, + "rss_bytes": 15007744 + }, + { + "wall_ns": 33280833, + "cpu_ns": 29883000, + "rss_bytes": 15089664 + }, + { + "wall_ns": 33067667, + "cpu_ns": 29918000, + "rss_bytes": 14958592 + }, + { + "wall_ns": 33065416, + "cpu_ns": 29652000, + "rss_bytes": 15007744 + }, + { + "wall_ns": 32235917, + "cpu_ns": 28895000, + "rss_bytes": 15056896 + }, + { + "wall_ns": 33700250, + "cpu_ns": 30485000, + "rss_bytes": 14958592 + }, + { + "wall_ns": 34641834, + "cpu_ns": 31375000, + "rss_bytes": 14974976 + }, + { + "wall_ns": 31867916, + "cpu_ns": 28664000, + "rss_bytes": 14991360 + }, + { + "wall_ns": 32725375, + "cpu_ns": 29499000, + "rss_bytes": 15073280 + }, + { + "wall_ns": 30845875, + "cpu_ns": 27791000, + "rss_bytes": 15024128 + }, + { + "wall_ns": 29644375, + "cpu_ns": 26637000, + "rss_bytes": 15040512 + }, + { + "wall_ns": 29522834, + "cpu_ns": 26075000, + "rss_bytes": 14991360 + }, + { + "wall_ns": 29646708, + "cpu_ns": 26694000, + "rss_bytes": 15089664 + }, + { + "wall_ns": 29434333, + "cpu_ns": 26412000, + "rss_bytes": 15024128 + }, + { + "wall_ns": 30154041, + "cpu_ns": 27118000, + "rss_bytes": 15073280 + }, + { + "wall_ns": 28676917, + "cpu_ns": 25746000, + "rss_bytes": 14958592 + }, + { + "wall_ns": 28672125, + "cpu_ns": 25828000, + "rss_bytes": 15056896 + }, + { + "wall_ns": 28871208, + "cpu_ns": 26022000, + "rss_bytes": 15007744 + }, + { + "wall_ns": 27691208, + "cpu_ns": 24933000, + "rss_bytes": 15007744 + }, + { + "wall_ns": 29524792, + "cpu_ns": 26581000, + "rss_bytes": 15040512 + }, + { + "wall_ns": 30291584, + "cpu_ns": 27121000, + "rss_bytes": 15171584 + }, + { + "wall_ns": 30479125, + "cpu_ns": 27336000, + "rss_bytes": 15040512 + }, + { + "wall_ns": 31756542, + "cpu_ns": 28479000, + "rss_bytes": 15007744 + } + ] + }, + "comparisons": { + "wall_ns": 0.9894987146808395, + "cpu_ns": 0.9906024716786818, + "rss_bytes": 0.9955282280603689 + } + }, + "startup_no_site": { + "samples": { + "base": [ + { + "wall_ns": 13940500, + "cpu_ns": 11329000, + "rss_bytes": 19611648 + }, + { + "wall_ns": 14071834, + "cpu_ns": 11270000, + "rss_bytes": 19464192 + }, + { + "wall_ns": 13070875, + "cpu_ns": 10942000, + "rss_bytes": 19415040 + }, + { + "wall_ns": 13026583, + "cpu_ns": 10399000, + "rss_bytes": 19562496 + }, + { + "wall_ns": 12647375, + "cpu_ns": 10240000, + "rss_bytes": 19628032 + }, + { + "wall_ns": 12835625, + "cpu_ns": 10405000, + "rss_bytes": 19464192 + }, + { + "wall_ns": 13760209, + "cpu_ns": 11315000, + "rss_bytes": 19513344 + }, + { + "wall_ns": 15220000, + "cpu_ns": 13051000, + "rss_bytes": 19578880 + }, + { + "wall_ns": 13205250, + "cpu_ns": 10844000, + "rss_bytes": 19513344 + }, + { + "wall_ns": 13646792, + "cpu_ns": 11226000, + "rss_bytes": 19562496 + }, + { + "wall_ns": 13253084, + "cpu_ns": 10897000, + "rss_bytes": 19578880 + }, + { + "wall_ns": 13306541, + "cpu_ns": 10851000, + "rss_bytes": 19628032 + }, + { + "wall_ns": 12867833, + "cpu_ns": 10424000, + "rss_bytes": 19300352 + }, + { + "wall_ns": 12781834, + "cpu_ns": 10386000, + "rss_bytes": 19496960 + }, + { + "wall_ns": 14769750, + "cpu_ns": 12250000, + "rss_bytes": 19628032 + }, + { + "wall_ns": 14329584, + "cpu_ns": 11783000, + "rss_bytes": 19349504 + }, + { + "wall_ns": 13018041, + "cpu_ns": 10659000, + "rss_bytes": 19546112 + }, + { + "wall_ns": 12478791, + "cpu_ns": 10188000, + "rss_bytes": 19382272 + }, + { + "wall_ns": 12786625, + "cpu_ns": 10374000, + "rss_bytes": 19529728 + }, + { + "wall_ns": 12920625, + "cpu_ns": 10400000, + "rss_bytes": 19431424 + }, + { + "wall_ns": 13147292, + "cpu_ns": 10661000, + "rss_bytes": 19562496 + }, + { + "wall_ns": 13602583, + "cpu_ns": 11523000, + "rss_bytes": 19562496 + }, + { + "wall_ns": 12082833, + "cpu_ns": 9773000, + "rss_bytes": 19480576 + }, + { + "wall_ns": 12537916, + "cpu_ns": 10328000, + "rss_bytes": 19562496 + }, + { + "wall_ns": 13401542, + "cpu_ns": 10828000, + "rss_bytes": 19382272 + }, + { + "wall_ns": 13700209, + "cpu_ns": 11140000, + "rss_bytes": 19415040 + }, + { + "wall_ns": 13545125, + "cpu_ns": 11027000, + "rss_bytes": 19578880 + }, + { + "wall_ns": 13593458, + "cpu_ns": 11117000, + "rss_bytes": 19578880 + }, + { + "wall_ns": 13401375, + "cpu_ns": 10951000, + "rss_bytes": 19660800 + }, + { + "wall_ns": 12680083, + "cpu_ns": 10776000, + "rss_bytes": 19562496 + }, + { + "wall_ns": 12947292, + "cpu_ns": 10600000, + "rss_bytes": 19431424 + } + ], + "new": [ + { + "wall_ns": 15151208, + "cpu_ns": 13110000, + "rss_bytes": 19398656 + }, + { + "wall_ns": 12532833, + "cpu_ns": 10257000, + "rss_bytes": 19398656 + }, + { + "wall_ns": 13672875, + "cpu_ns": 11166000, + "rss_bytes": 19382272 + }, + { + "wall_ns": 13256791, + "cpu_ns": 10824000, + "rss_bytes": 19382272 + }, + { + "wall_ns": 13235375, + "cpu_ns": 10736000, + "rss_bytes": 19316736 + }, + { + "wall_ns": 12874708, + "cpu_ns": 10179000, + "rss_bytes": 19316736 + }, + { + "wall_ns": 13893791, + "cpu_ns": 12034000, + "rss_bytes": 19365888 + }, + { + "wall_ns": 15574958, + "cpu_ns": 13405000, + "rss_bytes": 19365888 + }, + { + "wall_ns": 14399166, + "cpu_ns": 11743000, + "rss_bytes": 19447808 + }, + { + "wall_ns": 13209417, + "cpu_ns": 10657000, + "rss_bytes": 19464192 + }, + { + "wall_ns": 13533583, + "cpu_ns": 10758000, + "rss_bytes": 19349504 + }, + { + "wall_ns": 12484834, + "cpu_ns": 10048000, + "rss_bytes": 19431424 + }, + { + "wall_ns": 13058750, + "cpu_ns": 10616000, + "rss_bytes": 19365888 + }, + { + "wall_ns": 12808125, + "cpu_ns": 10490000, + "rss_bytes": 19398656 + }, + { + "wall_ns": 13957250, + "cpu_ns": 11235000, + "rss_bytes": 19480576 + }, + { + "wall_ns": 12600750, + "cpu_ns": 10262000, + "rss_bytes": 19333120 + }, + { + "wall_ns": 13461042, + "cpu_ns": 10937000, + "rss_bytes": 19382272 + }, + { + "wall_ns": 12794625, + "cpu_ns": 11018000, + "rss_bytes": 19349504 + }, + { + "wall_ns": 13166417, + "cpu_ns": 10718000, + "rss_bytes": 19398656 + }, + { + "wall_ns": 11996333, + "cpu_ns": 9893000, + "rss_bytes": 19333120 + }, + { + "wall_ns": 12405625, + "cpu_ns": 10140000, + "rss_bytes": 19431424 + }, + { + "wall_ns": 13011625, + "cpu_ns": 10624000, + "rss_bytes": 19398656 + }, + { + "wall_ns": 12755292, + "cpu_ns": 10761000, + "rss_bytes": 19415040 + }, + { + "wall_ns": 12856917, + "cpu_ns": 10455000, + "rss_bytes": 19480576 + }, + { + "wall_ns": 13212625, + "cpu_ns": 10729000, + "rss_bytes": 19415040 + }, + { + "wall_ns": 12970084, + "cpu_ns": 10948000, + "rss_bytes": 19382272 + }, + { + "wall_ns": 13329083, + "cpu_ns": 10936000, + "rss_bytes": 19365888 + }, + { + "wall_ns": 12648875, + "cpu_ns": 10288000, + "rss_bytes": 19365888 + }, + { + "wall_ns": 13378375, + "cpu_ns": 11017000, + "rss_bytes": 19382272 + }, + { + "wall_ns": 13045958, + "cpu_ns": 10504000, + "rss_bytes": 19398656 + }, + { + "wall_ns": 13361584, + "cpu_ns": 10824000, + "rss_bytes": 19415040 + } + ], + "cpython": [ + { + "wall_ns": 22678583, + "cpu_ns": 19354000, + "rss_bytes": 12402688 + }, + { + "wall_ns": 22160709, + "cpu_ns": 18993000, + "rss_bytes": 12402688 + }, + { + "wall_ns": 23116500, + "cpu_ns": 19585000, + "rss_bytes": 12419072 + }, + { + "wall_ns": 22243750, + "cpu_ns": 18863000, + "rss_bytes": 12419072 + }, + { + "wall_ns": 21202208, + "cpu_ns": 18096000, + "rss_bytes": 12369920 + }, + { + "wall_ns": 20692083, + "cpu_ns": 17680000, + "rss_bytes": 12451840 + }, + { + "wall_ns": 22550916, + "cpu_ns": 19368000, + "rss_bytes": 12517376 + }, + { + "wall_ns": 23718208, + "cpu_ns": 20667000, + "rss_bytes": 12402688 + }, + { + "wall_ns": 23487625, + "cpu_ns": 20369000, + "rss_bytes": 12468224 + }, + { + "wall_ns": 21841500, + "cpu_ns": 18974000, + "rss_bytes": 12402688 + }, + { + "wall_ns": 21627125, + "cpu_ns": 18791000, + "rss_bytes": 12451840 + }, + { + "wall_ns": 21210958, + "cpu_ns": 17906000, + "rss_bytes": 12419072 + }, + { + "wall_ns": 21023083, + "cpu_ns": 18075000, + "rss_bytes": 12435456 + }, + { + "wall_ns": 21593542, + "cpu_ns": 18288000, + "rss_bytes": 12419072 + }, + { + "wall_ns": 22839084, + "cpu_ns": 19901000, + "rss_bytes": 12468224 + }, + { + "wall_ns": 21378083, + "cpu_ns": 18524000, + "rss_bytes": 12419072 + }, + { + "wall_ns": 20820084, + "cpu_ns": 18065000, + "rss_bytes": 12419072 + }, + { + "wall_ns": 22601958, + "cpu_ns": 19461000, + "rss_bytes": 12435456 + }, + { + "wall_ns": 21206625, + "cpu_ns": 18752000, + "rss_bytes": 12419072 + }, + { + "wall_ns": 20622250, + "cpu_ns": 17775000, + "rss_bytes": 12419072 + }, + { + "wall_ns": 21117750, + "cpu_ns": 18291000, + "rss_bytes": 12419072 + }, + { + "wall_ns": 21612125, + "cpu_ns": 19200000, + "rss_bytes": 12451840 + }, + { + "wall_ns": 22785291, + "cpu_ns": 19109000, + "rss_bytes": 12451840 + }, + { + "wall_ns": 20863417, + "cpu_ns": 18020000, + "rss_bytes": 12451840 + }, + { + "wall_ns": 21398792, + "cpu_ns": 18749000, + "rss_bytes": 12419072 + }, + { + "wall_ns": 21142958, + "cpu_ns": 18489000, + "rss_bytes": 12419072 + }, + { + "wall_ns": 21712708, + "cpu_ns": 18958000, + "rss_bytes": 12402688 + }, + { + "wall_ns": 21549291, + "cpu_ns": 18625000, + "rss_bytes": 12468224 + }, + { + "wall_ns": 21832084, + "cpu_ns": 18900000, + "rss_bytes": 12451840 + }, + { + "wall_ns": 21783166, + "cpu_ns": 18674000, + "rss_bytes": 12402688 + }, + { + "wall_ns": 21437416, + "cpu_ns": 18604000, + "rss_bytes": 12435456 + } + ] + }, + "comparisons": { + "wall_ns": 1.009707846734014, + "cpu_ns": 1.0060268468633002, + "rss_bytes": 0.9932885906040269 + } + }, + "imports": { + "samples": { + "base": [ + { + "wall_ns": 106664292, + "cpu_ns": 103365000, + "rss_bytes": 44072960 + }, + { + "wall_ns": 107897000, + "cpu_ns": 104176000, + "rss_bytes": 44023808 + }, + { + "wall_ns": 106210667, + "cpu_ns": 102980000, + "rss_bytes": 44023808 + }, + { + "wall_ns": 107874292, + "cpu_ns": 104255000, + "rss_bytes": 44122112 + }, + { + "wall_ns": 116374041, + "cpu_ns": 112847000, + "rss_bytes": 44040192 + }, + { + "wall_ns": 118839958, + "cpu_ns": 115270000, + "rss_bytes": 44072960 + }, + { + "wall_ns": 114413083, + "cpu_ns": 110923000, + "rss_bytes": 44072960 + }, + { + "wall_ns": 106241292, + "cpu_ns": 102808000, + "rss_bytes": 44007424 + }, + { + "wall_ns": 107647291, + "cpu_ns": 104305000, + "rss_bytes": 43991040 + }, + { + "wall_ns": 113718916, + "cpu_ns": 110264000, + "rss_bytes": 44220416 + }, + { + "wall_ns": 123192167, + "cpu_ns": 119420000, + "rss_bytes": 43991040 + }, + { + "wall_ns": 119033250, + "cpu_ns": 115201000, + "rss_bytes": 44089344 + }, + { + "wall_ns": 104477750, + "cpu_ns": 100780000, + "rss_bytes": 43892736 + }, + { + "wall_ns": 95168709, + "cpu_ns": 91947000, + "rss_bytes": 43859968 + }, + { + "wall_ns": 97758625, + "cpu_ns": 94947000, + "rss_bytes": 44417024 + }, + { + "wall_ns": 97155208, + "cpu_ns": 94314000, + "rss_bytes": 43941888 + }, + { + "wall_ns": 99942166, + "cpu_ns": 97222000, + "rss_bytes": 44236800 + }, + { + "wall_ns": 98584000, + "cpu_ns": 95161000, + "rss_bytes": 43958272 + }, + { + "wall_ns": 109265500, + "cpu_ns": 106119000, + "rss_bytes": 44072960 + }, + { + "wall_ns": 106764833, + "cpu_ns": 104304000, + "rss_bytes": 44040192 + }, + { + "wall_ns": 103149125, + "cpu_ns": 99834000, + "rss_bytes": 44007424 + }, + { + "wall_ns": 108488750, + "cpu_ns": 104760000, + "rss_bytes": 44122112 + }, + { + "wall_ns": 103217541, + "cpu_ns": 99865000, + "rss_bytes": 44023808 + }, + { + "wall_ns": 103498875, + "cpu_ns": 100274000, + "rss_bytes": 43958272 + }, + { + "wall_ns": 99339583, + "cpu_ns": 96114000, + "rss_bytes": 44007424 + }, + { + "wall_ns": 103662833, + "cpu_ns": 100484000, + "rss_bytes": 44105728 + }, + { + "wall_ns": 99432583, + "cpu_ns": 96257000, + "rss_bytes": 44089344 + }, + { + "wall_ns": 100573458, + "cpu_ns": 97471000, + "rss_bytes": 44269568 + }, + { + "wall_ns": 100073917, + "cpu_ns": 96912000, + "rss_bytes": 44072960 + }, + { + "wall_ns": 102297083, + "cpu_ns": 98791000, + "rss_bytes": 44138496 + }, + { + "wall_ns": 98872167, + "cpu_ns": 95702000, + "rss_bytes": 43941888 + } + ], + "new": [ + { + "wall_ns": 107182916, + "cpu_ns": 103638000, + "rss_bytes": 43892736 + }, + { + "wall_ns": 105737667, + "cpu_ns": 102322000, + "rss_bytes": 43909120 + }, + { + "wall_ns": 105498750, + "cpu_ns": 102137000, + "rss_bytes": 44105728 + }, + { + "wall_ns": 103643459, + "cpu_ns": 100355000, + "rss_bytes": 43958272 + }, + { + "wall_ns": 117922750, + "cpu_ns": 114249000, + "rss_bytes": 43958272 + }, + { + "wall_ns": 118449875, + "cpu_ns": 114789000, + "rss_bytes": 43925504 + }, + { + "wall_ns": 114753584, + "cpu_ns": 111288000, + "rss_bytes": 43859968 + }, + { + "wall_ns": 107009792, + "cpu_ns": 103170000, + "rss_bytes": 44007424 + }, + { + "wall_ns": 105419667, + "cpu_ns": 102486000, + "rss_bytes": 44007424 + }, + { + "wall_ns": 114650083, + "cpu_ns": 110788000, + "rss_bytes": 44023808 + }, + { + "wall_ns": 116100833, + "cpu_ns": 112392000, + "rss_bytes": 44007424 + }, + { + "wall_ns": 115212208, + "cpu_ns": 111256000, + "rss_bytes": 43974656 + }, + { + "wall_ns": 108003709, + "cpu_ns": 104281000, + "rss_bytes": 44040192 + }, + { + "wall_ns": 97433541, + "cpu_ns": 94023000, + "rss_bytes": 44007424 + }, + { + "wall_ns": 103136709, + "cpu_ns": 99753000, + "rss_bytes": 43876352 + }, + { + "wall_ns": 96565333, + "cpu_ns": 93519000, + "rss_bytes": 43892736 + }, + { + "wall_ns": 97243625, + "cpu_ns": 94277000, + "rss_bytes": 43843584 + }, + { + "wall_ns": 102477375, + "cpu_ns": 99036000, + "rss_bytes": 44089344 + }, + { + "wall_ns": 102548000, + "cpu_ns": 99383000, + "rss_bytes": 43859968 + }, + { + "wall_ns": 106351333, + "cpu_ns": 103014000, + "rss_bytes": 43778048 + }, + { + "wall_ns": 101521417, + "cpu_ns": 98862000, + "rss_bytes": 43876352 + }, + { + "wall_ns": 103904542, + "cpu_ns": 101071000, + "rss_bytes": 43909120 + }, + { + "wall_ns": 102285375, + "cpu_ns": 99450000, + "rss_bytes": 43892736 + }, + { + "wall_ns": 99336833, + "cpu_ns": 96920000, + "rss_bytes": 43958272 + }, + { + "wall_ns": 98238750, + "cpu_ns": 95766000, + "rss_bytes": 44072960 + }, + { + "wall_ns": 101869291, + "cpu_ns": 98646000, + "rss_bytes": 43925504 + }, + { + "wall_ns": 102023250, + "cpu_ns": 98704000, + "rss_bytes": 43778048 + }, + { + "wall_ns": 100571917, + "cpu_ns": 97142000, + "rss_bytes": 43991040 + }, + { + "wall_ns": 99165083, + "cpu_ns": 95925000, + "rss_bytes": 43859968 + }, + { + "wall_ns": 100999291, + "cpu_ns": 98310000, + "rss_bytes": 43892736 + }, + { + "wall_ns": 99342958, + "cpu_ns": 96180000, + "rss_bytes": 43909120 + } + ], + "cpython": [ + { + "wall_ns": 35747500, + "cpu_ns": 32394000, + "rss_bytes": 16187392 + }, + { + "wall_ns": 37291542, + "cpu_ns": 34120000, + "rss_bytes": 16220160 + }, + { + "wall_ns": 37556708, + "cpu_ns": 34103000, + "rss_bytes": 16203776 + }, + { + "wall_ns": 37139333, + "cpu_ns": 33853000, + "rss_bytes": 16154624 + }, + { + "wall_ns": 38272833, + "cpu_ns": 35107000, + "rss_bytes": 16203776 + }, + { + "wall_ns": 39482666, + "cpu_ns": 35946000, + "rss_bytes": 16171008 + }, + { + "wall_ns": 39797750, + "cpu_ns": 36633000, + "rss_bytes": 16351232 + }, + { + "wall_ns": 36317458, + "cpu_ns": 33167000, + "rss_bytes": 16138240 + }, + { + "wall_ns": 35879959, + "cpu_ns": 32844000, + "rss_bytes": 16154624 + }, + { + "wall_ns": 38066042, + "cpu_ns": 34845000, + "rss_bytes": 16203776 + }, + { + "wall_ns": 38345041, + "cpu_ns": 35290000, + "rss_bytes": 16171008 + }, + { + "wall_ns": 40235375, + "cpu_ns": 36625000, + "rss_bytes": 16154624 + }, + { + "wall_ns": 39440625, + "cpu_ns": 36032000, + "rss_bytes": 16171008 + }, + { + "wall_ns": 36405958, + "cpu_ns": 33131000, + "rss_bytes": 16334848 + }, + { + "wall_ns": 35654000, + "cpu_ns": 32543000, + "rss_bytes": 16285696 + }, + { + "wall_ns": 32915958, + "cpu_ns": 29876000, + "rss_bytes": 16121856 + }, + { + "wall_ns": 33791583, + "cpu_ns": 30623000, + "rss_bytes": 16171008 + }, + { + "wall_ns": 35611417, + "cpu_ns": 32570000, + "rss_bytes": 16154624 + }, + { + "wall_ns": 35397125, + "cpu_ns": 32152000, + "rss_bytes": 16187392 + }, + { + "wall_ns": 34853833, + "cpu_ns": 31598000, + "rss_bytes": 16171008 + }, + { + "wall_ns": 34061833, + "cpu_ns": 31314000, + "rss_bytes": 16154624 + }, + { + "wall_ns": 33997125, + "cpu_ns": 31050000, + "rss_bytes": 16154624 + }, + { + "wall_ns": 35290916, + "cpu_ns": 31958000, + "rss_bytes": 16187392 + }, + { + "wall_ns": 33405208, + "cpu_ns": 30510000, + "rss_bytes": 16105472 + }, + { + "wall_ns": 33354416, + "cpu_ns": 30706000, + "rss_bytes": 16220160 + }, + { + "wall_ns": 34911583, + "cpu_ns": 31547000, + "rss_bytes": 16154624 + }, + { + "wall_ns": 34448042, + "cpu_ns": 31480000, + "rss_bytes": 16171008 + }, + { + "wall_ns": 33932708, + "cpu_ns": 30905000, + "rss_bytes": 16154624 + }, + { + "wall_ns": 32808666, + "cpu_ns": 29868000, + "rss_bytes": 16203776 + }, + { + "wall_ns": 34675292, + "cpu_ns": 31714000, + "rss_bytes": 16121856 + }, + { + "wall_ns": 33332292, + "cpu_ns": 30459000, + "rss_bytes": 16105472 + } + ] + }, + "comparisons": { + "wall_ns": 0.9932971233482603, + "cpu_ns": 0.9951311354273162, + "rss_bytes": 0.9970215934475056 + } + }, + "compile_small": { + "samples": { + "base": [ + { + "wall_ns": 164766708, + "cpu_ns": 161461000, + "rss_bytes": 29687808, + "ns": 116591709, + "work_cpu_ns": 116290000 + }, + { + "wall_ns": 145804000, + "cpu_ns": 142695000, + "rss_bytes": 29573120, + "ns": 104947208, + "work_cpu_ns": 104638000 + }, + { + "wall_ns": 149289708, + "cpu_ns": 145501000, + "rss_bytes": 29589504, + "ns": 104668000, + "work_cpu_ns": 104435000 + }, + { + "wall_ns": 143308250, + "cpu_ns": 139766000, + "rss_bytes": 29589504, + "ns": 102976417, + "work_cpu_ns": 102625000 + }, + { + "wall_ns": 140620667, + "cpu_ns": 137540000, + "rss_bytes": 29687808, + "ns": 99299166, + "work_cpu_ns": 99109000 + }, + { + "wall_ns": 140356458, + "cpu_ns": 137118000, + "rss_bytes": 29540352, + "ns": 100648542, + "work_cpu_ns": 100274000 + }, + { + "wall_ns": 138168166, + "cpu_ns": 135247000, + "rss_bytes": 29720576, + "ns": 98293833, + "work_cpu_ns": 98100000 + } + ], + "new": [ + { + "wall_ns": 163664209, + "cpu_ns": 160325000, + "rss_bytes": 29573120, + "ns": 117063583, + "work_cpu_ns": 116785000 + }, + { + "wall_ns": 146352583, + "cpu_ns": 143265000, + "rss_bytes": 29458432, + "ns": 104991167, + "work_cpu_ns": 104761000 + }, + { + "wall_ns": 143445625, + "cpu_ns": 139910000, + "rss_bytes": 29540352, + "ns": 103451000, + "work_cpu_ns": 103097000 + }, + { + "wall_ns": 140765417, + "cpu_ns": 137518000, + "rss_bytes": 29573120, + "ns": 101235416, + "work_cpu_ns": 101046000 + }, + { + "wall_ns": 142821875, + "cpu_ns": 139440000, + "rss_bytes": 29523968, + "ns": 102437666, + "work_cpu_ns": 101994000 + }, + { + "wall_ns": 139211000, + "cpu_ns": 136494000, + "rss_bytes": 29573120, + "ns": 99034458, + "work_cpu_ns": 98758000 + }, + { + "wall_ns": 139874375, + "cpu_ns": 136679000, + "rss_bytes": 29638656, + "ns": 100239291, + "work_cpu_ns": 100033000 + } + ], + "cpython": [ + { + "wall_ns": 143380625, + "cpu_ns": 139673000, + "rss_bytes": 15826944, + "ns": 109975625, + "work_cpu_ns": 109726000 + }, + { + "wall_ns": 126273333, + "cpu_ns": 122604000, + "rss_bytes": 15728640, + "ns": 96217083, + "work_cpu_ns": 95919000 + }, + { + "wall_ns": 126845709, + "cpu_ns": 123575000, + "rss_bytes": 15826944, + "ns": 96932958, + "work_cpu_ns": 96574000 + }, + { + "wall_ns": 127265167, + "cpu_ns": 123762000, + "rss_bytes": 15777792, + "ns": 96929625, + "work_cpu_ns": 96669000 + }, + { + "wall_ns": 131286667, + "cpu_ns": 126820000, + "rss_bytes": 15794176, + "ns": 99015250, + "work_cpu_ns": 97381000 + }, + { + "wall_ns": 124391084, + "cpu_ns": 120928000, + "rss_bytes": 15761408, + "ns": 94684542, + "work_cpu_ns": 94445000 + }, + { + "wall_ns": 124819375, + "cpu_ns": 121270000, + "rss_bytes": 15679488, + "ns": 95332542, + "work_cpu_ns": 95148000 + } + ] + }, + "comparisons": { + "wall_ns": 0.9933087271489335, + "cpu_ns": 0.9954491751629982, + "rss_bytes": 0.9972436604189636, + "ns": 1.000418867741579, + "work_cpu_ns": 1.0011754811827442 + } + }, + "compile_6000": { + "samples": { + "base": [ + { + "wall_ns": 344724125, + "cpu_ns": 340297000, + "rss_bytes": 48611328, + "ns": 297672333, + "work_cpu_ns": 297013000 + }, + { + "wall_ns": 350676667, + "cpu_ns": 346600000, + "rss_bytes": 48594944, + "ns": 302932625, + "work_cpu_ns": 302136000 + }, + { + "wall_ns": 345289209, + "cpu_ns": 341520000, + "rss_bytes": 49004544, + "ns": 298328167, + "work_cpu_ns": 297625000 + }, + { + "wall_ns": 348467875, + "cpu_ns": 344365000, + "rss_bytes": 48726016, + "ns": 300852916, + "work_cpu_ns": 300125000 + }, + { + "wall_ns": 349124416, + "cpu_ns": 345647000, + "rss_bytes": 48726016, + "ns": 301519625, + "work_cpu_ns": 300730000 + }, + { + "wall_ns": 348391042, + "cpu_ns": 344403000, + "rss_bytes": 48791552, + "ns": 301184375, + "work_cpu_ns": 300429000 + }, + { + "wall_ns": 366699541, + "cpu_ns": 362674000, + "rss_bytes": 48578560, + "ns": 316629458, + "work_cpu_ns": 315832000 + } + ], + "new": [ + { + "wall_ns": 79176542, + "cpu_ns": 75917000, + "rss_bytes": 49168384, + "ns": 32837375, + "work_cpu_ns": 32778000 + }, + { + "wall_ns": 79484708, + "cpu_ns": 75799000, + "rss_bytes": 48857088, + "ns": 32319958, + "work_cpu_ns": 32175000 + }, + { + "wall_ns": 78864958, + "cpu_ns": 75663000, + "rss_bytes": 48889856, + "ns": 33282625, + "work_cpu_ns": 33217000 + }, + { + "wall_ns": 81397750, + "cpu_ns": 78052000, + "rss_bytes": 48840704, + "ns": 34381792, + "work_cpu_ns": 34297000 + }, + { + "wall_ns": 79507500, + "cpu_ns": 76416000, + "rss_bytes": 48873472, + "ns": 32805708, + "work_cpu_ns": 32696000 + }, + { + "wall_ns": 82155583, + "cpu_ns": 79390000, + "rss_bytes": 50266112, + "ns": 34025667, + "work_cpu_ns": 33934000 + }, + { + "wall_ns": 84478041, + "cpu_ns": 81626000, + "rss_bytes": 48889856, + "ns": 34608334, + "work_cpu_ns": 34520000 + } + ], + "cpython": [ + { + "wall_ns": 78543625, + "cpu_ns": 75279000, + "rss_bytes": 33439744, + "ns": 47610958, + "work_cpu_ns": 47520000 + }, + { + "wall_ns": 79282417, + "cpu_ns": 75877000, + "rss_bytes": 33554432, + "ns": 48049708, + "work_cpu_ns": 47936000 + }, + { + "wall_ns": 77967167, + "cpu_ns": 74656000, + "rss_bytes": 33488896, + "ns": 47324750, + "work_cpu_ns": 47162000 + }, + { + "wall_ns": 78937500, + "cpu_ns": 75735000, + "rss_bytes": 34177024, + "ns": 48322959, + "work_cpu_ns": 48229000 + }, + { + "wall_ns": 78496750, + "cpu_ns": 75341000, + "rss_bytes": 33685504, + "ns": 47899542, + "work_cpu_ns": 47771000 + }, + { + "wall_ns": 85252208, + "cpu_ns": 81934000, + "rss_bytes": 33538048, + "ns": 52276375, + "work_cpu_ns": 52090000 + }, + { + "wall_ns": 82566208, + "cpu_ns": 79039000, + "rss_bytes": 33472512, + "ns": 50038750, + "work_cpu_ns": 49770000 + } + ] + }, + "comparisons": { + "wall_ns": 0.2296808846784367, + "cpu_ns": 0.22309041807597482, + "rss_bytes": 1.0053944706675657, + "ns": 0.11031382953551146, + "work_cpu_ns": 0.11035880584351526 + } + }, + "compile_20000": { + "samples": { + "base": [ + { + "wall_ns": 992588625, + "cpu_ns": 986694000, + "rss_bytes": 82378752, + "ns": 927315833, + "work_cpu_ns": 925133000 + }, + { + "wall_ns": 974099291, + "cpu_ns": 968214000, + "rss_bytes": 82149376, + "ns": 909370875, + "work_cpu_ns": 907127000 + }, + { + "wall_ns": 1048691625, + "cpu_ns": 1042005000, + "rss_bytes": 82149376, + "ns": 982156333, + "work_cpu_ns": 979592000 + }, + { + "wall_ns": 1104678291, + "cpu_ns": 1098461000, + "rss_bytes": 82165760, + "ns": 1027360625, + "work_cpu_ns": 1025040000 + }, + { + "wall_ns": 962214208, + "cpu_ns": 956114000, + "rss_bytes": 82395136, + "ns": 896560333, + "work_cpu_ns": 894488000 + }, + { + "wall_ns": 963217417, + "cpu_ns": 958152000, + "rss_bytes": 82411520, + "ns": 897653958, + "work_cpu_ns": 895730000 + }, + { + "wall_ns": 1032507375, + "cpu_ns": 1025395000, + "rss_bytes": 82214912, + "ns": 966921917, + "work_cpu_ns": 964351000 + } + ], + "new": [ + { + "wall_ns": 112891417, + "cpu_ns": 109035000, + "rss_bytes": 84574208, + "ns": 47998667, + "work_cpu_ns": 47888000 + }, + { + "wall_ns": 114152125, + "cpu_ns": 110344000, + "rss_bytes": 84770816, + "ns": 50035250, + "work_cpu_ns": 49895000 + }, + { + "wall_ns": 115990583, + "cpu_ns": 112193000, + "rss_bytes": 84705280, + "ns": 52201791, + "work_cpu_ns": 52021000 + }, + { + "wall_ns": 122957208, + "cpu_ns": 118388000, + "rss_bytes": 84672512, + "ns": 53651500, + "work_cpu_ns": 53507000 + }, + { + "wall_ns": 113119042, + "cpu_ns": 109365000, + "rss_bytes": 84656128, + "ns": 49541917, + "work_cpu_ns": 49470000 + }, + { + "wall_ns": 116510167, + "cpu_ns": 112573000, + "rss_bytes": 84525056, + "ns": 52138750, + "work_cpu_ns": 52038000 + }, + { + "wall_ns": 110378000, + "cpu_ns": 106296000, + "rss_bytes": 84688896, + "ns": 48531833, + "work_cpu_ns": 48432000 + } + ], + "cpython": [ + { + "wall_ns": 97933583, + "cpu_ns": 93812000, + "rss_bytes": 74776576, + "ns": 62801958, + "work_cpu_ns": 62607000 + }, + { + "wall_ns": 96536584, + "cpu_ns": 92888000, + "rss_bytes": 74743808, + "ns": 62118375, + "work_cpu_ns": 61929000 + }, + { + "wall_ns": 95062791, + "cpu_ns": 91134000, + "rss_bytes": 74711040, + "ns": 60714125, + "work_cpu_ns": 60495000 + }, + { + "wall_ns": 99428167, + "cpu_ns": 95508000, + "rss_bytes": 74760192, + "ns": 64665334, + "work_cpu_ns": 64507000 + }, + { + "wall_ns": 96668375, + "cpu_ns": 93138000, + "rss_bytes": 75202560, + "ns": 63163459, + "work_cpu_ns": 62958000 + }, + { + "wall_ns": 95255458, + "cpu_ns": 91637000, + "rss_bytes": 74760192, + "ns": 61851042, + "work_cpu_ns": 61677000 + }, + { + "wall_ns": 95360416, + "cpu_ns": 92185000, + "rss_bytes": 74776576, + "ns": 62340334, + "work_cpu_ns": 62214000 + } + ] + }, + "comparisons": { + "wall_ns": 0.11373434488028714, + "cpu_ns": 0.110505384648128, + "rss_bytes": 1.0300916699880431, + "ns": 0.053150185205800636, + "work_cpu_ns": 0.05310476198253967 + } + }, + "join_large": { + "samples": { + "base": [ + { + "wall_ns": 107449667, + "cpu_ns": 103650000, + "rss_bytes": 64372736, + "ns": 64107583, + "work_cpu_ns": 63976000 + }, + { + "wall_ns": 108806208, + "cpu_ns": 105323000, + "rss_bytes": 64307200, + "ns": 64178625, + "work_cpu_ns": 64064000 + }, + { + "wall_ns": 115858667, + "cpu_ns": 112975000, + "rss_bytes": 64454656, + "ns": 69943250, + "work_cpu_ns": 69812000 + }, + { + "wall_ns": 117941708, + "cpu_ns": 114276000, + "rss_bytes": 64290816, + "ns": 70157667, + "work_cpu_ns": 70057000 + }, + { + "wall_ns": 117750000, + "cpu_ns": 113697000, + "rss_bytes": 64520192, + "ns": 70109583, + "work_cpu_ns": 69819000 + }, + { + "wall_ns": 107929333, + "cpu_ns": 103996000, + "rss_bytes": 64389120, + "ns": 63751667, + "work_cpu_ns": 63636000 + }, + { + "wall_ns": 109866958, + "cpu_ns": 105914000, + "rss_bytes": 64438272, + "ns": 66446084, + "work_cpu_ns": 66340000 + } + ], + "new": [ + { + "wall_ns": 56414708, + "cpu_ns": 53885000, + "rss_bytes": 51445760, + "ns": 9805542, + "work_cpu_ns": 9801000 + }, + { + "wall_ns": 52528500, + "cpu_ns": 49409000, + "rss_bytes": 51429376, + "ns": 10192250, + "work_cpu_ns": 10147000 + }, + { + "wall_ns": 58377292, + "cpu_ns": 55075000, + "rss_bytes": 51445760, + "ns": 10832250, + "work_cpu_ns": 10827000 + }, + { + "wall_ns": 58186750, + "cpu_ns": 54702000, + "rss_bytes": 51380224, + "ns": 10853334, + "work_cpu_ns": 10799000 + }, + { + "wall_ns": 57670041, + "cpu_ns": 54202000, + "rss_bytes": 51314688, + "ns": 10738500, + "work_cpu_ns": 10660000 + }, + { + "wall_ns": 53914083, + "cpu_ns": 50537000, + "rss_bytes": 51363840, + "ns": 10598834, + "work_cpu_ns": 10535000 + }, + { + "wall_ns": 53345167, + "cpu_ns": 50145000, + "rss_bytes": 51412992, + "ns": 10302542, + "work_cpu_ns": 10182000 + } + ], + "cpython": [ + { + "wall_ns": 44974083, + "cpu_ns": 41382000, + "rss_bytes": 28868608, + "ns": 10138417, + "work_cpu_ns": 10100000 + }, + { + "wall_ns": 40642708, + "cpu_ns": 37802000, + "rss_bytes": 28819456, + "ns": 8785833, + "work_cpu_ns": 8740000 + }, + { + "wall_ns": 44233917, + "cpu_ns": 40810000, + "rss_bytes": 28884992, + "ns": 9759292, + "work_cpu_ns": 9701000 + }, + { + "wall_ns": 44514166, + "cpu_ns": 40650000, + "rss_bytes": 28884992, + "ns": 9779000, + "work_cpu_ns": 9732000 + }, + { + "wall_ns": 45101084, + "cpu_ns": 41915000, + "rss_bytes": 28917760, + "ns": 9618333, + "work_cpu_ns": 9613000 + }, + { + "wall_ns": 40816459, + "cpu_ns": 37565000, + "rss_bytes": 28917760, + "ns": 8919166, + "work_cpu_ns": 8915000 + }, + { + "wall_ns": 40512459, + "cpu_ns": 37255000, + "rss_bytes": 28901376, + "ns": 9115167, + "work_cpu_ns": 9075000 + } + ] + }, + "comparisons": { + "wall_ns": 0.493351766620168, + "cpu_ns": 0.47868318807098603, + "rss_bytes": 0.7981698017285206, + "ns": 0.15487198550253242, + "work_cpu_ns": 0.1541459097591961 + } + }, + "split_bounded": { + "samples": { + "base": [ + { + "wall_ns": 76788042, + "cpu_ns": 70086000, + "rss_bytes": 228098048, + "ns": 31319666, + "work_cpu_ns": 30903000 + }, + { + "wall_ns": 75396584, + "cpu_ns": 69533000, + "rss_bytes": 228294656, + "ns": 30974792, + "work_cpu_ns": 30906000 + }, + { + "wall_ns": 75172000, + "cpu_ns": 69172000, + "rss_bytes": 228081664, + "ns": 30853708, + "work_cpu_ns": 30679000 + }, + { + "wall_ns": 74818250, + "cpu_ns": 69575000, + "rss_bytes": 228130816, + "ns": 30204750, + "work_cpu_ns": 30110000 + }, + { + "wall_ns": 73036500, + "cpu_ns": 67220000, + "rss_bytes": 228327424, + "ns": 29282917, + "work_cpu_ns": 29160000 + }, + { + "wall_ns": 74257833, + "cpu_ns": 72043000, + "rss_bytes": 228163584, + "ns": 30154958, + "work_cpu_ns": 30018000 + }, + { + "wall_ns": 74865000, + "cpu_ns": 72600000, + "rss_bytes": 228212736, + "ns": 30363792, + "work_cpu_ns": 30307000 + } + ], + "new": [ + { + "wall_ns": 43158125, + "cpu_ns": 40011000, + "rss_bytes": 34177024, + "ns": 501958, + "work_cpu_ns": 498000 + }, + { + "wall_ns": 41189375, + "cpu_ns": 38254000, + "rss_bytes": 34193408, + "ns": 541500, + "work_cpu_ns": 537000 + }, + { + "wall_ns": 43198167, + "cpu_ns": 39969000, + "rss_bytes": 34226176, + "ns": 542333, + "work_cpu_ns": 539000 + }, + { + "wall_ns": 41065500, + "cpu_ns": 38334000, + "rss_bytes": 34177024, + "ns": 438208, + "work_cpu_ns": 435000 + }, + { + "wall_ns": 40961291, + "cpu_ns": 37971000, + "rss_bytes": 34127872, + "ns": 492917, + "work_cpu_ns": 488000 + }, + { + "wall_ns": 40679959, + "cpu_ns": 37898000, + "rss_bytes": 34078720, + "ns": 509958, + "work_cpu_ns": 507000 + }, + { + "wall_ns": 42901042, + "cpu_ns": 39781000, + "rss_bytes": 34291712, + "ns": 495416, + "work_cpu_ns": 492000 + } + ], + "cpython": [ + { + "wall_ns": 31664375, + "cpu_ns": 28396000, + "rss_bytes": 22331392, + "ns": 823250, + "work_cpu_ns": 820000 + }, + { + "wall_ns": 31435750, + "cpu_ns": 28001000, + "rss_bytes": 22380544, + "ns": 797042, + "work_cpu_ns": 794000 + }, + { + "wall_ns": 30640917, + "cpu_ns": 27632000, + "rss_bytes": 22396928, + "ns": 799334, + "work_cpu_ns": 798000 + }, + { + "wall_ns": 30151459, + "cpu_ns": 27039000, + "rss_bytes": 22413312, + "ns": 759542, + "work_cpu_ns": 758000 + }, + { + "wall_ns": 30097625, + "cpu_ns": 26893000, + "rss_bytes": 22380544, + "ns": 852375, + "work_cpu_ns": 851000 + }, + { + "wall_ns": 30803000, + "cpu_ns": 27967000, + "rss_bytes": 22396928, + "ns": 826458, + "work_cpu_ns": 824000 + }, + { + "wall_ns": 30407875, + "cpu_ns": 27373000, + "rss_bytes": 22446080, + "ns": 845042, + "work_cpu_ns": 844000 + } + ] + }, + "comparisons": { + "wall_ns": 0.5608331587630843, + "cpu_ns": 0.5509737693136902, + "rss_bytes": 0.149813272048262, + "ns": 0.016832920026375788, + "work_cpu_ns": 0.01673525377229081 + } + }, + "case_ascii": { + "samples": { + "base": [ + { + "wall_ns": 280725917, + "cpu_ns": 276809000, + "rss_bytes": 52674560, + "ns": 237942833, + "work_cpu_ns": 237436000 + }, + { + "wall_ns": 283531375, + "cpu_ns": 278397000, + "rss_bytes": 54738944, + "ns": 241423000, + "work_cpu_ns": 239541000 + }, + { + "wall_ns": 278959333, + "cpu_ns": 275813000, + "rss_bytes": 53559296, + "ns": 236888917, + "work_cpu_ns": 236391000 + }, + { + "wall_ns": 290827167, + "cpu_ns": 287034000, + "rss_bytes": 52609024, + "ns": 247885166, + "work_cpu_ns": 247276000 + }, + { + "wall_ns": 314695166, + "cpu_ns": 310517000, + "rss_bytes": 52707328, + "ns": 266298000, + "work_cpu_ns": 265485000 + }, + { + "wall_ns": 286240792, + "cpu_ns": 282640000, + "rss_bytes": 52609024, + "ns": 242910666, + "work_cpu_ns": 242448000 + }, + { + "wall_ns": 274510167, + "cpu_ns": 271843000, + "rss_bytes": 52609024, + "ns": 232640750, + "work_cpu_ns": 232133000 + } + ], + "new": [ + { + "wall_ns": 58310041, + "cpu_ns": 55045000, + "rss_bytes": 51445760, + "ns": 15943333, + "work_cpu_ns": 15880000 + }, + { + "wall_ns": 59524959, + "cpu_ns": 56353000, + "rss_bytes": 50577408, + "ns": 16316625, + "work_cpu_ns": 16248000 + }, + { + "wall_ns": 56321209, + "cpu_ns": 53613000, + "rss_bytes": 50380800, + "ns": 15378666, + "work_cpu_ns": 15331000 + }, + { + "wall_ns": 65635875, + "cpu_ns": 62091000, + "rss_bytes": 50511872, + "ns": 17958917, + "work_cpu_ns": 17922000 + }, + { + "wall_ns": 65804166, + "cpu_ns": 62333000, + "rss_bytes": 50577408, + "ns": 17950584, + "work_cpu_ns": 17858000 + }, + { + "wall_ns": 58943166, + "cpu_ns": 55650000, + "rss_bytes": 50429952, + "ns": 16093125, + "work_cpu_ns": 16024000 + }, + { + "wall_ns": 55436709, + "cpu_ns": 52235000, + "rss_bytes": 50593792, + "ns": 15364500, + "work_cpu_ns": 15342000 + } + ], + "cpython": [ + { + "wall_ns": 74113666, + "cpu_ns": 70838000, + "rss_bytes": 24199168, + "ns": 43558375, + "work_cpu_ns": 43463000 + }, + { + "wall_ns": 74737792, + "cpu_ns": 71479000, + "rss_bytes": 23134208, + "ns": 44201791, + "work_cpu_ns": 44133000 + }, + { + "wall_ns": 73846958, + "cpu_ns": 70549000, + "rss_bytes": 23101440, + "ns": 42976250, + "work_cpu_ns": 42880000 + }, + { + "wall_ns": 83215833, + "cpu_ns": 79586000, + "rss_bytes": 23150592, + "ns": 48528333, + "work_cpu_ns": 48325000 + }, + { + "wall_ns": 82519541, + "cpu_ns": 79045000, + "rss_bytes": 23101440, + "ns": 48672291, + "work_cpu_ns": 48549000 + }, + { + "wall_ns": 73869667, + "cpu_ns": 70250000, + "rss_bytes": 23101440, + "ns": 42888959, + "work_cpu_ns": 42761000 + }, + { + "wall_ns": 72982334, + "cpu_ns": 69628000, + "rss_bytes": 23134208, + "ns": 43376667, + "work_cpu_ns": 43282000 + } + ] + }, + "comparisons": { + "wall_ns": 0.20771164138721115, + "cpu_ns": 0.19885552854134078, + "rss_bytes": 0.9595896798259248, + "ns": 0.06700488852295039, + "work_cpu_ns": 0.06688118061288094 + } + }, + "case_unicode": { + "samples": { + "base": [ + { + "wall_ns": 57059750, + "cpu_ns": 54253000, + "rss_bytes": 36044800, + "ns": 17611375, + "work_cpu_ns": 17569000 + }, + { + "wall_ns": 57326292, + "cpu_ns": 54112000, + "rss_bytes": 35946496, + "ns": 17014166, + "work_cpu_ns": 16988000 + }, + { + "wall_ns": 57048375, + "cpu_ns": 53981000, + "rss_bytes": 35913728, + "ns": 17254291, + "work_cpu_ns": 17187000 + }, + { + "wall_ns": 56954541, + "cpu_ns": 53815000, + "rss_bytes": 36208640, + "ns": 17144292, + "work_cpu_ns": 17067000 + }, + { + "wall_ns": 56212916, + "cpu_ns": 53218000, + "rss_bytes": 35930112, + "ns": 17248750, + "work_cpu_ns": 17151000 + }, + { + "wall_ns": 57268792, + "cpu_ns": 54129000, + "rss_bytes": 35995648, + "ns": 17496125, + "work_cpu_ns": 17397000 + }, + { + "wall_ns": 59564125, + "cpu_ns": 56905000, + "rss_bytes": 36077568, + "ns": 17607750, + "work_cpu_ns": 17573000 + } + ], + "new": [ + { + "wall_ns": 56702167, + "cpu_ns": 53722000, + "rss_bytes": 35946496, + "ns": 17390875, + "work_cpu_ns": 17351000 + }, + { + "wall_ns": 57262292, + "cpu_ns": 54021000, + "rss_bytes": 35913728, + "ns": 17369750, + "work_cpu_ns": 17320000 + }, + { + "wall_ns": 57044958, + "cpu_ns": 54157000, + "rss_bytes": 35782656, + "ns": 17727583, + "work_cpu_ns": 17678000 + }, + { + "wall_ns": 56642125, + "cpu_ns": 53816000, + "rss_bytes": 35848192, + "ns": 17162583, + "work_cpu_ns": 17141000 + }, + { + "wall_ns": 55724042, + "cpu_ns": 52545000, + "rss_bytes": 35749888, + "ns": 16538166, + "work_cpu_ns": 16504000 + }, + { + "wall_ns": 56345041, + "cpu_ns": 53275000, + "rss_bytes": 35913728, + "ns": 17010625, + "work_cpu_ns": 16980000 + }, + { + "wall_ns": 59366625, + "cpu_ns": 56438000, + "rss_bytes": 35848192, + "ns": 18263708, + "work_cpu_ns": 18232000 + } + ], + "cpython": [ + { + "wall_ns": 38046541, + "cpu_ns": 35229000, + "rss_bytes": 20545536, + "ns": 8551500, + "work_cpu_ns": 8544000 + }, + { + "wall_ns": 38328959, + "cpu_ns": 35352000, + "rss_bytes": 20791296, + "ns": 8814375, + "work_cpu_ns": 8811000 + }, + { + "wall_ns": 37256291, + "cpu_ns": 34195000, + "rss_bytes": 20594688, + "ns": 8757167, + "work_cpu_ns": 8719000 + }, + { + "wall_ns": 38792584, + "cpu_ns": 35412000, + "rss_bytes": 20561920, + "ns": 8706250, + "work_cpu_ns": 8660000 + }, + { + "wall_ns": 38108833, + "cpu_ns": 35040000, + "rss_bytes": 20643840, + "ns": 8775875, + "work_cpu_ns": 8739000 + }, + { + "wall_ns": 37937292, + "cpu_ns": 34910000, + "rss_bytes": 20594688, + "ns": 8500000, + "work_cpu_ns": 8497000 + }, + { + "wall_ns": 39747625, + "cpu_ns": 36782000, + "rss_bytes": 20578304, + "ns": 9238375, + "work_cpu_ns": 9180000 + } + ] + }, + "comparisons": { + "wall_ns": 0.9945146428271628, + "cpu_ns": 0.991793339776821, + "rss_bytes": 0.9963503649635036, + "ns": 1.0010668857016667, + "work_cpu_ns": 1.0043358528153747 + } + } + } +} diff --git a/crates/weavepy-bench/census/2026-09-execution/probes.py b/crates/weavepy-bench/census/2026-09-execution/probes.py new file mode 100644 index 00000000..1ab3e058 --- /dev/null +++ b/crates/weavepy-bench/census/2026-09-execution/probes.py @@ -0,0 +1,174 @@ +"""Paired startup, compilation, and allocation probes; run from the repo root.""" + +import argparse +import hashlib +import json +import os +from pathlib import Path +import platform +import re +import statistics +import subprocess +import sys +import tempfile +import time + + +KERNELS = { + "compile_small": ''' +source = """class Point: + def __init__(self, x, y): + self.x, self.y = x, y + def length2(self): + return self.x * self.x + self.y * self.y + +def process(n): + return [Point(i, i + 1).length2() for i in range(n) if i % 2] +""" +def bench(): + for _ in range(1500): + compile(source, "", "exec") +''', + "compile_6000": ''' +source = "\\n".join("name_%d = %d" % (i, i) for i in range(6000)) +def bench(): + for _ in range(3): + compile(source, "", "exec") +''', + "compile_20000": ''' +source = "\\n".join("name_%d = %d" % (i, i) for i in range(20000)) +def bench(): + compile(source, "", "exec") +''', + "join_large": ''' +items = ["abcdefgh" * 8] * 100000 +def bench(): + for _ in range(10): + result = "|".join(items) + assert len(result) == 6499999 +''', + "split_bounded": ''' +text = "word \\u2003" * 200000 +def bench(): + for _ in range(10): + result = text.split(None, 1) + assert result[0] == "word" and len(result) == 2 +''', + "case_ascii": ''' +text = "The QUICK brown Fox 123; " * 40000 +def bench(): + for _ in range(10): + result = text.lower().upper().title() + assert result.startswith("The Quick Brown Fox") +''', + "case_unicode": ''' +text = "Straße ΟΣ ΟΣΑ İ dz \\u0301; " * 10000 +def bench(): + for _ in range(3): + result = text.lower().upper().title() + assert result.startswith("Strasse") +''', +} + +TIMER = ''' +import time +start = time.perf_counter_ns() +cpu = time.process_time_ns() +bench() +cpu = time.process_time_ns() - cpu +elapsed = time.perf_counter_ns() - start +print("TIMING", elapsed, cpu) +''' + + +def measure(binary, flags, source, timed, cache=None): + env = {**os.environ, "WEAVEPY_JIT": "0"} + if cache is not None: + env["WEAVEPY_STDLIB_CACHE"] = cache + with tempfile.TemporaryFile() as output: + start = time.perf_counter_ns() + child = subprocess.Popen( + [binary, *flags, "-c", source], + env=env, + stdin=subprocess.DEVNULL, stdout=output, stderr=subprocess.STDOUT, + ) + _, status, usage = os.wait4(child.pid, 0) + wall = time.perf_counter_ns() - start + child.returncode = os.waitstatus_to_exitcode(status) + output.seek(0) + text = output.read().decode(errors="replace") + if child.returncode: + raise RuntimeError(f"{binary}: {text}") + result = { + "wall_ns": wall, + "cpu_ns": round((usage.ru_utime + usage.ru_stime) * 1e9), + "rss_bytes": usage.ru_maxrss * (1 if sys.platform == "darwin" else 1024), + } + if timed: + match = re.search(r"TIMING (\d+) (\d+)", text) + if match is None: + raise RuntimeError(f"Missing timing: {text}") + result.update(ns=int(match[1]), work_cpu_ns=int(match[2])) + return result + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--base", required=True) + parser.add_argument("--new", required=True) + parser.add_argument("--python", default="python3.14") + parser.add_argument("--samples", type=int, default=7) + parser.add_argument("--only", nargs="*") + parser.add_argument("--out", type=Path, required=True) + args = parser.parse_args() + if args.samples < 1: + parser.error("--samples must be positive") + variants = [("base", args.base), ("new", args.new), ("cpython", args.python)] + report = { + "platform": platform.platform(), + "jit": False, + "binaries": { + label: {"path": binary, "sha256": hashlib.sha256(Path(binary).read_bytes()).hexdigest(), + "bytes": Path(binary).stat().st_size} + for label, binary in variants[:2] + }, + "rows": {}, + } + probes = { + "startup": ([], "pass", False), + "startup_no_site": (["-S"], "pass", False), + "startup_fresh_cache": ([], "pass", False), + "imports": ([], "import json, datetime, collections, pathlib", False), + **{name: ([], source + TIMER, True) for name, source in KERNELS.items()}, + } + if args.only: + probes = {name: probes[name] for name in args.only} + args.out.parent.mkdir(parents=True, exist_ok=True) + for name, (flags, source, timed) in probes.items(): + fresh = name == "startup_fresh_cache" + count = args.samples if timed or fresh else max(args.samples, 31) + # Extraction of WeavePy's embedded library has no CPython equivalent. + active = variants[:2] if fresh else variants + samples = {label: [] for label, _ in active} + for cycle in range(count + 1): + for label, binary in active if cycle % 2 == 0 else reversed(active): + if fresh: + with tempfile.TemporaryDirectory(prefix="weavepy-perf-cache-") as cache: + value = measure(binary, flags, source, timed, cache) + else: + value = measure(binary, flags, source, timed) + if cycle: + samples[label].append(value) + metrics = samples["new"][0] + ratios = { + key: statistics.median(new[key] / base[key] for new, base in + zip(samples["new"], samples["base"], strict=True)) + for key in metrics + } + report["rows"][name] = {"samples": samples, "comparisons": ratios} + args.out.write_text(json.dumps(report, indent=2) + "\n") + print(name, {key: round(value, 3) for key, value in ratios.items()}, flush=True) + + +if __name__ == "__main__": + main() diff --git a/crates/weavepy-bench/census/2026-09-execution/scaling-long.json b/crates/weavepy-bench/census/2026-09-execution/scaling-long.json new file mode 100644 index 00000000..19b5eb59 --- /dev/null +++ b/crates/weavepy-bench/census/2026-09-execution/scaling-long.json @@ -0,0 +1,191 @@ +{ + "work": 3000000, + "samples": { + "base_1": [ + { + "serial_ns": 151416958, + "parallel_ns": 193730833, + "scaling": 0.7815841993514786, + "wall_ns": 619184875, + "cpu_ns": 588579000, + "rss_bytes": 61931520 + }, + { + "serial_ns": 150514666, + "parallel_ns": 172711625, + "scaling": 0.871479647070659, + "wall_ns": 581562042, + "cpu_ns": 560351000, + "rss_bytes": 61997056 + }, + { + "serial_ns": 176062250, + "parallel_ns": 211199541, + "scaling": 0.8336298893755645, + "wall_ns": 696411041, + "cpu_ns": 680690000, + "rss_bytes": 62685184 + }, + { + "serial_ns": 177560000, + "parallel_ns": 193013417, + "scaling": 0.9199360477619025, + "wall_ns": 677568833, + "cpu_ns": 662754000, + "rss_bytes": 62652416 + }, + { + "serial_ns": 166326542, + "parallel_ns": 182493875, + "scaling": 0.9114089007096814, + "wall_ns": 615485417, + "cpu_ns": 594895000, + "rss_bytes": 62078976 + } + ], + "new_1": [ + { + "serial_ns": 152982541, + "parallel_ns": 183549167, + "scaling": 0.8334690017961236, + "wall_ns": 602909958, + "cpu_ns": 586242000, + "rss_bytes": 62029824 + }, + { + "serial_ns": 150303750, + "parallel_ns": 185263083, + "scaling": 0.8112989785450132, + "wall_ns": 612122666, + "cpu_ns": 596717000, + "rss_bytes": 61898752 + }, + { + "serial_ns": 182302208, + "parallel_ns": 206279250, + "scaling": 0.883764159507076, + "wall_ns": 706967000, + "cpu_ns": 675300000, + "rss_bytes": 62406656 + }, + { + "serial_ns": 189020250, + "parallel_ns": 214968375, + "scaling": 0.8792932913969322, + "wall_ns": 734418792, + "cpu_ns": 700933000, + "rss_bytes": 62357504 + }, + { + "serial_ns": 170441125, + "parallel_ns": 201669208, + "scaling": 0.8451519529942321, + "wall_ns": 766828791, + "cpu_ns": 654435000, + "rss_bytes": 62652416 + } + ], + "base_0": [ + { + "serial_ns": 7272766542, + "parallel_ns": 2007530166, + "scaling": 3.6227433416310615, + "wall_ns": 10086229041, + "cpu_ns": 16555231000, + "rss_bytes": 57360384 + }, + { + "serial_ns": 8306456916, + "parallel_ns": 2113707500, + "scaling": 3.9298043442623922, + "wall_ns": 11377352916, + "cpu_ns": 18544978000, + "rss_bytes": 57720832 + }, + { + "serial_ns": 9867918917, + "parallel_ns": 2382644167, + "scaling": 4.141583142658162, + "wall_ns": 13416940917, + "cpu_ns": 21519204000, + "rss_bytes": 57507840 + }, + { + "serial_ns": 9695443583, + "parallel_ns": 2421546250, + "scaling": 4.003823417785227, + "wall_ns": 13321047833, + "cpu_ns": 20946633000, + "rss_bytes": 57573376 + }, + { + "serial_ns": 7714745875, + "parallel_ns": 2047917500, + "scaling": 3.7671175108372283, + "wall_ns": 10763122292, + "cpu_ns": 18332738000, + "rss_bytes": 57589760 + } + ], + "new_0": [ + { + "serial_ns": 7022966625, + "parallel_ns": 1973672500, + "scaling": 3.5583242027236026, + "wall_ns": 9805240583, + "cpu_ns": 15808285000, + "rss_bytes": 57409536 + }, + { + "serial_ns": 9293655000, + "parallel_ns": 2428542667, + "scaling": 3.8268444389657494, + "wall_ns": 12714852625, + "cpu_ns": 20659797000, + "rss_bytes": 57753600 + }, + { + "serial_ns": 9904905167, + "parallel_ns": 2424632000, + "scaling": 4.085116903101172, + "wall_ns": 13393376417, + "cpu_ns": 21526144000, + "rss_bytes": 57278464 + }, + { + "serial_ns": 9303981709, + "parallel_ns": 2097372208, + "scaling": 4.436018401269862, + "wall_ns": 12485744000, + "cpu_ns": 20274476000, + "rss_bytes": 57262080 + }, + { + "serial_ns": 8829401792, + "parallel_ns": 2311465334, + "scaling": 3.819828773603403, + "wall_ns": 12119137833, + "cpu_ns": 19745761000, + "rss_bytes": 57540608 + } + ] + }, + "comparisons": { + "1": { + "serial_ns": 1.0247379819872646, + "parallel_ns": 1.0726729193822362, + "scaling": 0.9558200198113235, + "wall_ns": 1.0525492067792142, + "cpu_ns": 1.0576065930948737, + "rss_bytes": 0.9984143763213531 + }, + "0": { + "serial_ns": 1.003748130716425, + "parallel_ns": 1.0176223682837489, + "scaling": 0.9863660253550411, + "wall_ns": 0.9982436756526115, + "cpu_ns": 1.0003225026353206, + "rss_bytes": 0.9991465149359886 + } + } +} diff --git a/crates/weavepy-bench/census/2026-09-execution/scaling.json b/crates/weavepy-bench/census/2026-09-execution/scaling.json new file mode 100644 index 00000000..5ecbfea4 --- /dev/null +++ b/crates/weavepy-bench/census/2026-09-execution/scaling.json @@ -0,0 +1,191 @@ +{ + "work": 1000000, + "samples": { + "base_1": [ + { + "serial_ns": 32467917, + "parallel_ns": 35138667, + "scaling": 0.9239939864537263, + "wall_ns": 177934375, + "cpu_ns": 176452000, + "rss_bytes": 61751296 + }, + { + "serial_ns": 32611292, + "parallel_ns": 35396375, + "scaling": 0.9213172817837985, + "wall_ns": 181201083, + "cpu_ns": 179634000, + "rss_bytes": 61571072 + }, + { + "serial_ns": 32711125, + "parallel_ns": 35070958, + "scaling": 0.9327126165187731, + "wall_ns": 180488917, + "cpu_ns": 178757000, + "rss_bytes": 61538304 + }, + { + "serial_ns": 32388791, + "parallel_ns": 34981208, + "scaling": 0.925891152758361, + "wall_ns": 179702375, + "cpu_ns": 178073000, + "rss_bytes": 61685760 + }, + { + "serial_ns": 34126541, + "parallel_ns": 35541750, + "scaling": 0.9601817862091765, + "wall_ns": 191568042, + "cpu_ns": 189651000, + "rss_bytes": 61685760 + } + ], + "new_1": [ + { + "serial_ns": 32660250, + "parallel_ns": 35225708, + "scaling": 0.9271708605544564, + "wall_ns": 182782084, + "cpu_ns": 181172000, + "rss_bytes": 61505536 + }, + { + "serial_ns": 32340458, + "parallel_ns": 34954750, + "scaling": 0.925209249100623, + "wall_ns": 179745458, + "cpu_ns": 178288000, + "rss_bytes": 61390848 + }, + { + "serial_ns": 34443416, + "parallel_ns": 35533125, + "scaling": 0.9693325875503491, + "wall_ns": 199430583, + "cpu_ns": 197208000, + "rss_bytes": 61456384 + }, + { + "serial_ns": 32841125, + "parallel_ns": 35017750, + "scaling": 0.9378422371511591, + "wall_ns": 178110667, + "cpu_ns": 176392000, + "rss_bytes": 61685760 + }, + { + "serial_ns": 36806875, + "parallel_ns": 37138333, + "scaling": 0.9910750436752237, + "wall_ns": 206623459, + "cpu_ns": 204130000, + "rss_bytes": 61505536 + } + ], + "base_0": [ + { + "serial_ns": 1177251250, + "parallel_ns": 253368583, + "scaling": 4.646397892196445, + "wall_ns": 1647852833, + "cpu_ns": 3376826000, + "rss_bytes": 57393152 + }, + { + "serial_ns": 1179412292, + "parallel_ns": 268150375, + "scaling": 4.398324231319833, + "wall_ns": 1660931458, + "cpu_ns": 3373634000, + "rss_bytes": 57229312 + }, + { + "serial_ns": 1188668667, + "parallel_ns": 296959875, + "scaling": 4.002792185307864, + "wall_ns": 1709595292, + "cpu_ns": 3629680000, + "rss_bytes": 57475072 + }, + { + "serial_ns": 1185355750, + "parallel_ns": 285422959, + "scaling": 4.152979683740158, + "wall_ns": 1687925958, + "cpu_ns": 3646722000, + "rss_bytes": 57360384 + }, + { + "serial_ns": 1237573167, + "parallel_ns": 315705750, + "scaling": 3.920020991065256, + "wall_ns": 1810578291, + "cpu_ns": 3844504000, + "rss_bytes": 57196544 + } + ], + "new_0": [ + { + "serial_ns": 1192170416, + "parallel_ns": 267581084, + "scaling": 4.455361336379069, + "wall_ns": 1664979625, + "cpu_ns": 3327700000, + "rss_bytes": 57360384 + }, + { + "serial_ns": 1201246208, + "parallel_ns": 291703041, + "scaling": 4.118044857818263, + "wall_ns": 1699577916, + "cpu_ns": 3553199000, + "rss_bytes": 57196544 + }, + { + "serial_ns": 1192820916, + "parallel_ns": 272941208, + "scaling": 4.3702485408506, + "wall_ns": 1689732875, + "cpu_ns": 3532477000, + "rss_bytes": 57114624 + }, + { + "serial_ns": 1221815083, + "parallel_ns": 309715292, + "scaling": 3.944962081497739, + "wall_ns": 1778796875, + "cpu_ns": 3809354000, + "rss_bytes": 57131008 + }, + { + "serial_ns": 1242964375, + "parallel_ns": 310399958, + "scaling": 4.004396079847408, + "wall_ns": 1806029709, + "cpu_ns": 3873120000, + "rss_bytes": 57114624 + } + ] + }, + "comparisons": { + "1": { + "serial_ns": 1.0139657574745535, + "parallel_ns": 1.0024770717682603, + "scaling": 1.0129076558915096, + "wall_ns": 1.0272443646709637, + "cpu_ns": 1.0267494842790108, + "rss_bytes": 0.997078353253652 + }, + "0": { + "serial_ns": 1.0126728818508368, + "parallel_ns": 1.0560941724965167, + "scaling": 0.9588850201274801, + "wall_ns": 1.0103933990081018, + "cpu_ns": 1.0074433529006603, + "rss_bytes": 0.9985677456316242 + } + } +} diff --git a/crates/weavepy-bench/census/2026-09-execution/scaling.py b/crates/weavepy-bench/census/2026-09-execution/scaling.py new file mode 100644 index 00000000..f1e3357e --- /dev/null +++ b/crates/weavepy-bench/census/2026-09-execution/scaling.py @@ -0,0 +1,72 @@ +"""Interleave the existing eight-thread fixture across binaries and GIL modes.""" + +import argparse +import json +import os +from pathlib import Path +import re +import statistics +import subprocess +import tempfile +import time + + +def measure(binary, gil, work): + with tempfile.TemporaryFile() as output: + start = time.perf_counter_ns() + child = subprocess.Popen( + [binary, '-X', f'gil={gil}', 'crates/weavepy-bench/fixtures/parallel_scaling.py'], + env={**os.environ, 'WEAVEPY_BENCH_WORK': str(work), 'WEAVEPY_JIT': '1'}, + stdin=subprocess.DEVNULL, stdout=output, stderr=subprocess.STDOUT, + ) + _, status, usage = os.wait4(child.pid, 0) + wall = time.perf_counter_ns() - start + child.returncode = os.waitstatus_to_exitcode(status) + output.seek(0) + text = output.read().decode(errors='replace') + if child.returncode: + raise RuntimeError(text) + import sys + serial = int(re.search(r'WEAVEPY_BENCH_SERIAL_NS=(\d+)', text)[1]) + parallel = int(re.search(r'WEAVEPY_BENCH_PARALLEL_NS=(\d+)', text)[1]) + return { + 'serial_ns': serial, 'parallel_ns': parallel, 'scaling': serial / parallel, + 'wall_ns': wall, 'cpu_ns': round((usage.ru_utime + usage.ru_stime) * 1e9), + 'rss_bytes': usage.ru_maxrss * (1 if sys.platform == 'darwin' else 1024), + } + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--base', required=True) + parser.add_argument('--new', required=True) + parser.add_argument('--samples', type=int, default=5) + parser.add_argument('--work', type=int, default=1000000) + parser.add_argument('--out', type=Path, required=True) + args = parser.parse_args() + if args.samples < 1 or args.work < 1: + parser.error('--samples and --work must be positive') + variants = [(f'{label}_{gil}', binary, gil) for gil in (1, 0) + for label, binary in [('base', args.base), ('new', args.new)]] + samples = {label: [] for label, _, _ in variants} + for cycle in range(args.samples + 1): + for label, binary, gil in variants if cycle % 2 == 0 else reversed(variants): + value = measure(binary, gil, args.work) + if cycle: + samples[label].append(value) + print('Completed cycle', cycle, flush=True) + comparisons = { + str(gil): { + key: statistics.median(new[key] / base[key] for new, base in + zip(samples[f'new_{gil}'], samples[f'base_{gil}'], strict=True)) + for key in samples[f'new_{gil}'][0] + } for gil in (1, 0) + } + args.out.parent.mkdir(parents=True, exist_ok=True) + args.out.write_text(json.dumps({'work': args.work, 'samples': samples, + 'comparisons': comparisons}, indent=2) + '\n') + print(comparisons, flush=True) + + +if __name__ == '__main__': + main() diff --git a/crates/weavepy-bench/census/2026-09-execution/suite.json b/crates/weavepy-bench/census/2026-09-execution/suite.json new file mode 100644 index 00000000..6e1a8688 --- /dev/null +++ b/crates/weavepy-bench/census/2026-09-execution/suite.json @@ -0,0 +1,4985 @@ +{ + "samples": 5, + "warm": false, + "platform": "darwin-arm64", + "binaries": { + "base": { + "path": "target/release/weavepy-perf-971d752", + "bytes": 44120992 + }, + "new": { + "path": "target/release/weavepy", + "bytes": 44121520 + } + }, + "rows": { + "fannkuch": { + "work": 100000, + "base": { + "samples": [ + { + "ns": 178324625, + "wall_ns": 219625333, + "cpu_ns": 214684000, + "rss_bytes": 31424512 + }, + { + "ns": 192742958, + "wall_ns": 242066833, + "cpu_ns": 237824000, + "rss_bytes": 31309824 + }, + { + "ns": 162646291, + "wall_ns": 202609708, + "cpu_ns": 199114000, + "rss_bytes": 31457280 + }, + { + "ns": 162433791, + "wall_ns": 203399709, + "cpu_ns": 199840000, + "rss_bytes": 31424512 + }, + { + "ns": 131245667, + "wall_ns": 166633833, + "cpu_ns": 163536000, + "rss_bytes": 31457280 + } + ], + "ns": 162646291, + "wall_ns": 203399709, + "cpu_ns": 199840000, + "rss_bytes": 31424512 + }, + "new": { + "samples": [ + { + "ns": 163683208, + "wall_ns": 205402584, + "cpu_ns": 202041000, + "rss_bytes": 31227904 + }, + { + "ns": 228461125, + "wall_ns": 280062750, + "cpu_ns": 260280000, + "rss_bytes": 31244288 + }, + { + "ns": 165623667, + "wall_ns": 231809709, + "cpu_ns": 220698000, + "rss_bytes": 31440896 + }, + { + "ns": 162335541, + "wall_ns": 203084166, + "cpu_ns": 199453000, + "rss_bytes": 31293440 + }, + { + "ns": 136646917, + "wall_ns": 174705917, + "cpu_ns": 171300000, + "rss_bytes": 31490048 + } + ], + "ns": 163683208, + "wall_ns": 205402584, + "cpu_ns": 202041000, + "rss_bytes": 31293440 + }, + "base_interp": { + "samples": [ + { + "ns": 167233834, + "wall_ns": 207642833, + "cpu_ns": 204253000, + "rss_bytes": 29556736 + }, + { + "ns": 195747375, + "wall_ns": 258026917, + "cpu_ns": 252401000, + "rss_bytes": 29573120 + }, + { + "ns": 176998042, + "wall_ns": 221573875, + "cpu_ns": 217349000, + "rss_bytes": 29523968 + }, + { + "ns": 154320459, + "wall_ns": 193961375, + "cpu_ns": 191457000, + "rss_bytes": 29343744 + }, + { + "ns": 133465959, + "wall_ns": 166535417, + "cpu_ns": 163281000, + "rss_bytes": 29507584 + } + ], + "ns": 167233834, + "wall_ns": 207642833, + "cpu_ns": 204253000, + "rss_bytes": 29523968 + }, + "new_interp": { + "samples": [ + { + "ns": 173643125, + "wall_ns": 215715875, + "cpu_ns": 210285000, + "rss_bytes": 29294592 + }, + { + "ns": 190976167, + "wall_ns": 235089458, + "cpu_ns": 230086000, + "rss_bytes": 29343744 + }, + { + "ns": 182300958, + "wall_ns": 226235291, + "cpu_ns": 222131000, + "rss_bytes": 29310976 + }, + { + "ns": 138808417, + "wall_ns": 172826958, + "cpu_ns": 169916000, + "rss_bytes": 29376512 + }, + { + "ns": 131667666, + "wall_ns": 165225375, + "cpu_ns": 162170000, + "rss_bytes": 29310976 + } + ], + "ns": 173643125, + "wall_ns": 215715875, + "cpu_ns": 210285000, + "rss_bytes": 29310976 + }, + "cpython": { + "samples": [ + { + "ns": 14856667, + "wall_ns": 44427833, + "cpu_ns": 41489000, + "rss_bytes": 15237120 + }, + { + "ns": 17219666, + "wall_ns": 50267584, + "cpu_ns": 47149000, + "rss_bytes": 15237120 + }, + { + "ns": 16590292, + "wall_ns": 47845375, + "cpu_ns": 44623000, + "rss_bytes": 15187968 + }, + { + "ns": 12990875, + "wall_ns": 38869042, + "cpu_ns": 36239000, + "rss_bytes": 15155200 + }, + { + "ns": 11976584, + "wall_ns": 38328458, + "cpu_ns": 35489000, + "rss_bytes": 15253504 + } + ], + "ns": 14856667, + "wall_ns": 44427833, + "cpu_ns": 41489000, + "rss_bytes": 15237120 + }, + "comparisons": { + "jit": { + "ns": 1.018305833976872, + "wall_ns": 1.0484420471801785, + "cpu_ns": 1.0474757851482241, + "rss_bytes": 0.9979068550497122 + }, + "interp": { + "ns": 0.9865262047830489, + "wall_ns": 0.9921335531888691, + "cpu_ns": 0.9931957790557383, + "rss_bytes": 0.9927857935627081 + } + } + }, + "nbody": { + "work": 20000, + "base": { + "samples": [ + { + "ns": 326004958, + "wall_ns": 367388625, + "cpu_ns": 363605000, + "rss_bytes": 31834112 + }, + { + "ns": 416402500, + "wall_ns": 465826208, + "cpu_ns": 458207000, + "rss_bytes": 31801344 + }, + { + "ns": 384606750, + "wall_ns": 437385083, + "cpu_ns": 430499000, + "rss_bytes": 31948800 + }, + { + "ns": 385066959, + "wall_ns": 433301500, + "cpu_ns": 427635000, + "rss_bytes": 31752192 + }, + { + "ns": 375109500, + "wall_ns": 423674875, + "cpu_ns": 419109000, + "rss_bytes": 31866880 + } + ], + "ns": 384606750, + "wall_ns": 433301500, + "cpu_ns": 427635000, + "rss_bytes": 31834112 + }, + "new": { + "samples": [ + { + "ns": 331997375, + "wall_ns": 373265333, + "cpu_ns": 368972000, + "rss_bytes": 31850496 + }, + { + "ns": 611258833, + "wall_ns": 671944792, + "cpu_ns": 558236000, + "rss_bytes": 31965184 + }, + { + "ns": 445879000, + "wall_ns": 513592292, + "cpu_ns": 504198000, + "rss_bytes": 31850496 + }, + { + "ns": 399370292, + "wall_ns": 449227834, + "cpu_ns": 441832000, + "rss_bytes": 31752192 + }, + { + "ns": 385491917, + "wall_ns": 436196250, + "cpu_ns": 429149000, + "rss_bytes": 31768576 + } + ], + "ns": 399370292, + "wall_ns": 449227834, + "cpu_ns": 441832000, + "rss_bytes": 31850496 + }, + "base_interp": { + "samples": [ + { + "ns": 324770500, + "wall_ns": 366914875, + "cpu_ns": 361640000, + "rss_bytes": 29474816 + }, + { + "ns": 523563833, + "wall_ns": 590581167, + "cpu_ns": 581211000, + "rss_bytes": 29655040 + }, + { + "ns": 518291375, + "wall_ns": 578901583, + "cpu_ns": 567998000, + "rss_bytes": 29753344 + }, + { + "ns": 399908167, + "wall_ns": 448730208, + "cpu_ns": 442082000, + "rss_bytes": 29655040 + }, + { + "ns": 387570542, + "wall_ns": 440065917, + "cpu_ns": 433430000, + "rss_bytes": 29655040 + } + ], + "ns": 399908167, + "wall_ns": 448730208, + "cpu_ns": 442082000, + "rss_bytes": 29655040 + }, + "new_interp": { + "samples": [ + { + "ns": 617183042, + "wall_ns": 651405084, + "cpu_ns": 386644000, + "rss_bytes": 29409280 + }, + { + "ns": 491448625, + "wall_ns": 555633000, + "cpu_ns": 546126000, + "rss_bytes": 29491200 + }, + { + "ns": 448891416, + "wall_ns": 505707166, + "cpu_ns": 496430000, + "rss_bytes": 29392896 + }, + { + "ns": 401455958, + "wall_ns": 449726792, + "cpu_ns": 442752000, + "rss_bytes": 29622272 + }, + { + "ns": 397986000, + "wall_ns": 452681375, + "cpu_ns": 445650000, + "rss_bytes": 29556736 + } + ], + "ns": 448891416, + "wall_ns": 505707166, + "cpu_ns": 445650000, + "rss_bytes": 29491200 + }, + "cpython": { + "samples": [ + { + "ns": 28803541, + "wall_ns": 52489583, + "cpu_ns": 50353000, + "rss_bytes": 15499264 + }, + { + "ns": 51180917, + "wall_ns": 102236292, + "cpu_ns": 94789000, + "rss_bytes": 15515648 + }, + { + "ns": 51206833, + "wall_ns": 95208833, + "cpu_ns": 90245000, + "rss_bytes": 15482880 + }, + { + "ns": 50882625, + "wall_ns": 93319333, + "cpu_ns": 88787000, + "rss_bytes": 15450112 + }, + { + "ns": 49149833, + "wall_ns": 88349333, + "cpu_ns": 83988000, + "rss_bytes": 15679488 + } + ], + "ns": 50882625, + "wall_ns": 93319333, + "cpu_ns": 88787000, + "rss_bytes": 15499264 + }, + "comparisons": { + "jit": { + "ns": 1.0371450540372122, + "wall_ns": 1.0367557785975816, + "cpu_ns": 1.0331988728705555, + "rss_bytes": 1.0 + }, + "interp": { + "ns": 1.003870366068318, + "wall_ns": 1.0022208979521166, + "cpu_ns": 1.0015155559375863, + "rss_bytes": 0.9966850828729282 + } + } + }, + "fib": { + "work": 27, + "base": { + "samples": [ + { + "ns": 70462958, + "wall_ns": 117993417, + "cpu_ns": 114707000, + "rss_bytes": 31555584 + }, + { + "ns": 67205542, + "wall_ns": 115651083, + "cpu_ns": 112369000, + "rss_bytes": 31703040 + }, + { + "ns": 74171917, + "wall_ns": 127580291, + "cpu_ns": 122894000, + "rss_bytes": 31752192 + }, + { + "ns": 73719292, + "wall_ns": 125816125, + "cpu_ns": 121696000, + "rss_bytes": 31621120 + }, + { + "ns": 73489125, + "wall_ns": 124888250, + "cpu_ns": 121061000, + "rss_bytes": 31588352 + } + ], + "ns": 73489125, + "wall_ns": 124888250, + "cpu_ns": 121061000, + "rss_bytes": 31621120 + }, + "new": { + "samples": [ + { + "ns": 69541416, + "wall_ns": 119111042, + "cpu_ns": 115403000, + "rss_bytes": 31686656 + }, + { + "ns": 65444250, + "wall_ns": 108271750, + "cpu_ns": 105056000, + "rss_bytes": 31719424 + }, + { + "ns": 72124958, + "wall_ns": 123721584, + "cpu_ns": 119576000, + "rss_bytes": 31784960 + }, + { + "ns": 73058958, + "wall_ns": 122124666, + "cpu_ns": 117825000, + "rss_bytes": 31571968 + }, + { + "ns": 74756292, + "wall_ns": 122999416, + "cpu_ns": 118374000, + "rss_bytes": 31735808 + } + ], + "ns": 72124958, + "wall_ns": 122124666, + "cpu_ns": 117825000, + "rss_bytes": 31719424 + }, + "base_interp": { + "samples": [ + { + "ns": 276594959, + "wall_ns": 320325792, + "cpu_ns": 316498000, + "rss_bytes": 29343744 + }, + { + "ns": 271806541, + "wall_ns": 314540500, + "cpu_ns": 310660000, + "rss_bytes": 29458432 + }, + { + "ns": 304492333, + "wall_ns": 353550333, + "cpu_ns": 348011000, + "rss_bytes": 29442048 + }, + { + "ns": 294048458, + "wall_ns": 341751000, + "cpu_ns": 336340000, + "rss_bytes": 29540352 + }, + { + "ns": 300430042, + "wall_ns": 347508666, + "cpu_ns": 342873000, + "rss_bytes": 29573120 + } + ], + "ns": 294048458, + "wall_ns": 341751000, + "cpu_ns": 336340000, + "rss_bytes": 29458432 + }, + "new_interp": { + "samples": [ + { + "ns": 284852500, + "wall_ns": 330368625, + "cpu_ns": 326706000, + "rss_bytes": 29376512 + }, + { + "ns": 267584209, + "wall_ns": 312307959, + "cpu_ns": 307993000, + "rss_bytes": 29343744 + }, + { + "ns": 289422875, + "wall_ns": 331578834, + "cpu_ns": 326715000, + "rss_bytes": 29442048 + }, + { + "ns": 284885500, + "wall_ns": 328890750, + "cpu_ns": 323464000, + "rss_bytes": 29360128 + }, + { + "ns": 289630791, + "wall_ns": 346153500, + "cpu_ns": 332632000, + "rss_bytes": 29343744 + } + ], + "ns": 284885500, + "wall_ns": 330368625, + "cpu_ns": 326706000, + "rss_bytes": 29360128 + }, + "cpython": { + "samples": [ + { + "ns": 24005042, + "wall_ns": 57299750, + "cpu_ns": 54019000, + "rss_bytes": 15073280 + }, + { + "ns": 21218292, + "wall_ns": 55207542, + "cpu_ns": 51671000, + "rss_bytes": 15138816 + }, + { + "ns": 21573875, + "wall_ns": 52841250, + "cpu_ns": 50094000, + "rss_bytes": 15106048 + }, + { + "ns": 21748875, + "wall_ns": 57079709, + "cpu_ns": 53262000, + "rss_bytes": 15122432 + }, + { + "ns": 23677292, + "wall_ns": 59266625, + "cpu_ns": 55440000, + "rss_bytes": 15220736 + } + ], + "ns": 21748875, + "wall_ns": 57079709, + "cpu_ns": 53262000, + "rss_bytes": 15122432 + }, + "comparisons": { + "jit": { + "ns": 0.9869216106425733, + "wall_ns": 0.9706598895809261, + "cpu_ns": 0.9730011229189383, + "rss_bytes": 1.001031991744066 + }, + "interp": { + "ns": 0.9688386123079075, + "wall_ns": 0.9929022145001994, + "cpu_ns": 0.9701317980710059, + "rss_bytes": 0.9961067853170189 + } + } + }, + "pidigits": { + "work": 500000, + "base": { + "samples": [ + { + "ns": 3281863334, + "wall_ns": 3339051041, + "cpu_ns": 3312264000, + "rss_bytes": 32768000 + }, + { + "ns": 3913975584, + "wall_ns": 3967609458, + "cpu_ns": 3821699000, + "rss_bytes": 33095680 + }, + { + "ns": 2380175250, + "wall_ns": 2424955500, + "cpu_ns": 2410934000, + "rss_bytes": 32669696 + }, + { + "ns": 2376533916, + "wall_ns": 2408888834, + "cpu_ns": 2406087000, + "rss_bytes": 32768000 + }, + { + "ns": 2367773167, + "wall_ns": 2399235833, + "cpu_ns": 2396493000, + "rss_bytes": 32915456 + } + ], + "ns": 2380175250, + "wall_ns": 2424955500, + "cpu_ns": 2410934000, + "rss_bytes": 32768000 + }, + "new": { + "samples": [ + { + "ns": 3381715958, + "wall_ns": 3424571208, + "cpu_ns": 3411418000, + "rss_bytes": 32899072 + }, + { + "ns": 3158725542, + "wall_ns": 3201767916, + "cpu_ns": 3190662000, + "rss_bytes": 32686080 + }, + { + "ns": 2478401833, + "wall_ns": 2510197666, + "cpu_ns": 2507199000, + "rss_bytes": 32407552 + }, + { + "ns": 2511979625, + "wall_ns": 2543585541, + "cpu_ns": 2540256000, + "rss_bytes": 32686080 + }, + { + "ns": 2421317250, + "wall_ns": 2452035083, + "cpu_ns": 2449306000, + "rss_bytes": 32653312 + } + ], + "ns": 2511979625, + "wall_ns": 2543585541, + "cpu_ns": 2540256000, + "rss_bytes": 32686080 + }, + "base_interp": { + "samples": [ + { + "ns": 3188435833, + "wall_ns": 3390535000, + "cpu_ns": 3235568000, + "rss_bytes": 30703616 + }, + { + "ns": 3055166083, + "wall_ns": 3096193917, + "cpu_ns": 3085816000, + "rss_bytes": 31047680 + }, + { + "ns": 2396415416, + "wall_ns": 2573507250, + "cpu_ns": 2442227000, + "rss_bytes": 30375936 + }, + { + "ns": 2385027500, + "wall_ns": 2415743833, + "cpu_ns": 2413496000, + "rss_bytes": 30539776 + }, + { + "ns": 2425824584, + "wall_ns": 2610278208, + "cpu_ns": 2457803000, + "rss_bytes": 30670848 + } + ], + "ns": 2425824584, + "wall_ns": 2610278208, + "cpu_ns": 2457803000, + "rss_bytes": 30670848 + }, + "new_interp": { + "samples": [ + { + "ns": 3212058750, + "wall_ns": 3251899792, + "cpu_ns": 3241224000, + "rss_bytes": 30425088 + }, + { + "ns": 3581021458, + "wall_ns": 3622950250, + "cpu_ns": 3563750000, + "rss_bytes": 30310400 + }, + { + "ns": 3458922292, + "wall_ns": 3513429625, + "cpu_ns": 3275562000, + "rss_bytes": 30408704 + }, + { + "ns": 2383919625, + "wall_ns": 2414784667, + "cpu_ns": 2411100000, + "rss_bytes": 30261248 + }, + { + "ns": 2391746792, + "wall_ns": 2423785291, + "cpu_ns": 2420528000, + "rss_bytes": 30277632 + } + ], + "ns": 3212058750, + "wall_ns": 3251899792, + "cpu_ns": 3241224000, + "rss_bytes": 30310400 + }, + "cpython": { + "samples": [ + { + "ns": 3411751333, + "wall_ns": 3441157583, + "cpu_ns": 3430215000, + "rss_bytes": 15958016 + }, + { + "ns": 5072149500, + "wall_ns": 5123827666, + "cpu_ns": 4303672000, + "rss_bytes": 16072704 + }, + { + "ns": 3515836416, + "wall_ns": 3557015291, + "cpu_ns": 3329360000, + "rss_bytes": 15990784 + }, + { + "ns": 2696611708, + "wall_ns": 2728416292, + "cpu_ns": 2717596000, + "rss_bytes": 15794176 + }, + { + "ns": 2689718334, + "wall_ns": 2712088916, + "cpu_ns": 2709461000, + "rss_bytes": 15794176 + } + ], + "ns": 3411751333, + "wall_ns": 3441157583, + "cpu_ns": 3329360000, + "rss_bytes": 15958016 + }, + "comparisons": { + "jit": { + "ns": 1.0304255887091733, + "wall_ns": 1.0256121173201318, + "cpu_ns": 1.0299354157760372, + "rss_bytes": 0.9920358387257342 + }, + "interp": { + "ns": 1.0074089359915934, + "wall_ns": 0.9996029521065531, + "cpu_ns": 1.0017480701997301, + "rss_bytes": 0.9908798283261803 + } + } + }, + "pyaes": { + "work": 400, + "base": { + "samples": [ + { + "ns": 249344750, + "wall_ns": 283041917, + "cpu_ns": 280702000, + "rss_bytes": 31506432 + }, + { + "ns": 251437834, + "wall_ns": 284360625, + "cpu_ns": 282103000, + "rss_bytes": 31277056 + }, + { + "ns": 242891833, + "wall_ns": 273312708, + "cpu_ns": 271371000, + "rss_bytes": 31358976 + }, + { + "ns": 249016209, + "wall_ns": 279855125, + "cpu_ns": 277930000, + "rss_bytes": 31408128 + }, + { + "ns": 245937708, + "wall_ns": 276149000, + "cpu_ns": 274163000, + "rss_bytes": 31342592 + } + ], + "ns": 249016209, + "wall_ns": 279855125, + "cpu_ns": 277930000, + "rss_bytes": 31358976 + }, + "new": { + "samples": [ + { + "ns": 252748500, + "wall_ns": 285217209, + "cpu_ns": 282840000, + "rss_bytes": 31391744 + }, + { + "ns": 248311375, + "wall_ns": 281583583, + "cpu_ns": 279050000, + "rss_bytes": 31358976 + }, + { + "ns": 247630500, + "wall_ns": 277802250, + "cpu_ns": 275779000, + "rss_bytes": 31211520 + }, + { + "ns": 242718583, + "wall_ns": 273000666, + "cpu_ns": 270974000, + "rss_bytes": 31424512 + }, + { + "ns": 248898791, + "wall_ns": 279338750, + "cpu_ns": 277332000, + "rss_bytes": 31342592 + } + ], + "ns": 248311375, + "wall_ns": 279338750, + "cpu_ns": 277332000, + "rss_bytes": 31358976 + }, + "base_interp": { + "samples": [ + { + "ns": 261421166, + "wall_ns": 296592000, + "cpu_ns": 293494000, + "rss_bytes": 29343744 + }, + { + "ns": 251863000, + "wall_ns": 282717833, + "cpu_ns": 280565000, + "rss_bytes": 29540352 + }, + { + "ns": 249676084, + "wall_ns": 279250458, + "cpu_ns": 277089000, + "rss_bytes": 29491200 + }, + { + "ns": 251607750, + "wall_ns": 281650291, + "cpu_ns": 279432000, + "rss_bytes": 29425664 + }, + { + "ns": 245931584, + "wall_ns": 275871459, + "cpu_ns": 274001000, + "rss_bytes": 29310976 + } + ], + "ns": 251607750, + "wall_ns": 281650291, + "cpu_ns": 279432000, + "rss_bytes": 29425664 + }, + "new_interp": { + "samples": [ + { + "ns": 259963625, + "wall_ns": 297175125, + "cpu_ns": 294785000, + "rss_bytes": 29376512 + }, + { + "ns": 249895959, + "wall_ns": 281038250, + "cpu_ns": 278501000, + "rss_bytes": 29360128 + }, + { + "ns": 251270292, + "wall_ns": 283910958, + "cpu_ns": 280587000, + "rss_bytes": 29261824 + }, + { + "ns": 246331375, + "wall_ns": 275863208, + "cpu_ns": 273804000, + "rss_bytes": 29212672 + }, + { + "ns": 244936292, + "wall_ns": 274174833, + "cpu_ns": 272009000, + "rss_bytes": 29278208 + } + ], + "ns": 249895959, + "wall_ns": 281038250, + "cpu_ns": 278501000, + "rss_bytes": 29278208 + }, + "cpython": { + "samples": [ + { + "ns": 20731875, + "wall_ns": 45710959, + "cpu_ns": 43683000, + "rss_bytes": 15384576 + }, + { + "ns": 20103416, + "wall_ns": 41536583, + "cpu_ns": 39438000, + "rss_bytes": 15466496 + }, + { + "ns": 20710125, + "wall_ns": 44996459, + "cpu_ns": 42606000, + "rss_bytes": 15384576 + }, + { + "ns": 19371000, + "wall_ns": 43868708, + "cpu_ns": 39528000, + "rss_bytes": 15433728 + }, + { + "ns": 20201125, + "wall_ns": 41250042, + "cpu_ns": 39187000, + "rss_bytes": 15368192 + } + ], + "ns": 20201125, + "wall_ns": 43868708, + "cpu_ns": 39528000, + "rss_bytes": 15384576 + }, + "comparisons": { + "jit": { + "ns": 1.0120399715199428, + "wall_ns": 1.00768540583337, + "cpu_ns": 1.007616618335459, + "rss_bytes": 1.0 + }, + "interp": { + "ns": 0.994424548622815, + "wall_ns": 0.9940591543795542, + "cpu_ns": 0.9927299535403156, + "rss_bytes": 0.9938990571270105 + } + } + }, + "richards": { + "work": 50000, + "base": { + "samples": [ + { + "ns": 146988209, + "wall_ns": 186750167, + "cpu_ns": 183508000, + "rss_bytes": 31588352 + }, + { + "ns": 138154291, + "wall_ns": 172294250, + "cpu_ns": 170103000, + "rss_bytes": 31571968 + }, + { + "ns": 131952459, + "wall_ns": 164045542, + "cpu_ns": 162004000, + "rss_bytes": 31539200 + }, + { + "ns": 134168083, + "wall_ns": 166157250, + "cpu_ns": 164040000, + "rss_bytes": 31637504 + }, + { + "ns": 129683084, + "wall_ns": 164976291, + "cpu_ns": 162566000, + "rss_bytes": 31391744 + } + ], + "ns": 134168083, + "wall_ns": 166157250, + "cpu_ns": 164040000, + "rss_bytes": 31571968 + }, + "new": { + "samples": [ + { + "ns": 160016208, + "wall_ns": 208000042, + "cpu_ns": 197318000, + "rss_bytes": 31703040 + }, + { + "ns": 134673375, + "wall_ns": 178349292, + "cpu_ns": 168299000, + "rss_bytes": 31637504 + }, + { + "ns": 133395166, + "wall_ns": 168188083, + "cpu_ns": 165625000, + "rss_bytes": 31440896 + }, + { + "ns": 128454583, + "wall_ns": 161958625, + "cpu_ns": 159567000, + "rss_bytes": 31457280 + }, + { + "ns": 127041958, + "wall_ns": 161824083, + "cpu_ns": 159130000, + "rss_bytes": 31670272 + } + ], + "ns": 133395166, + "wall_ns": 168188083, + "cpu_ns": 165625000, + "rss_bytes": 31637504 + }, + "base_interp": { + "samples": [ + { + "ns": 215803917, + "wall_ns": 248432750, + "cpu_ns": 243643000, + "rss_bytes": 29474816 + }, + { + "ns": 211436333, + "wall_ns": 244201667, + "cpu_ns": 241475000, + "rss_bytes": 29458432 + }, + { + "ns": 221097833, + "wall_ns": 253256875, + "cpu_ns": 249096000, + "rss_bytes": 29474816 + }, + { + "ns": 198803334, + "wall_ns": 232569500, + "cpu_ns": 229568000, + "rss_bytes": 29474816 + }, + { + "ns": 200298667, + "wall_ns": 232021916, + "cpu_ns": 229721000, + "rss_bytes": 29491200 + } + ], + "ns": 211436333, + "wall_ns": 244201667, + "cpu_ns": 241475000, + "rss_bytes": 29474816 + }, + "new_interp": { + "samples": [ + { + "ns": 197117459, + "wall_ns": 229229834, + "cpu_ns": 225838000, + "rss_bytes": 29343744 + }, + { + "ns": 214182583, + "wall_ns": 249602917, + "cpu_ns": 247113000, + "rss_bytes": 29442048 + }, + { + "ns": 200421083, + "wall_ns": 232046250, + "cpu_ns": 229876000, + "rss_bytes": 29327360 + }, + { + "ns": 195575500, + "wall_ns": 231017125, + "cpu_ns": 228594000, + "rss_bytes": 29376512 + }, + { + "ns": 189374417, + "wall_ns": 222806833, + "cpu_ns": 220020000, + "rss_bytes": 29409280 + } + ], + "ns": 197117459, + "wall_ns": 231017125, + "cpu_ns": 228594000, + "rss_bytes": 29376512 + }, + "cpython": { + "samples": [ + { + "ns": 15184958, + "wall_ns": 37339542, + "cpu_ns": 35101000, + "rss_bytes": 15204352 + }, + { + "ns": 15932708, + "wall_ns": 40471083, + "cpu_ns": 37554000, + "rss_bytes": 15204352 + }, + { + "ns": 15332416, + "wall_ns": 39347750, + "cpu_ns": 36542000, + "rss_bytes": 15204352 + }, + { + "ns": 15374666, + "wall_ns": 40733667, + "cpu_ns": 37926000, + "rss_bytes": 15237120 + }, + { + "ns": 14600417, + "wall_ns": 39328834, + "cpu_ns": 36690000, + "rss_bytes": 15220736 + } + ], + "ns": 15332416, + "wall_ns": 39347750, + "cpu_ns": 36690000, + "rss_bytes": 15204352 + }, + "comparisons": { + "jit": { + "ns": 0.979633997599872, + "wall_ns": 1.025252383877643, + "cpu_ns": 0.9893946608819363, + "rss_bytes": 1.0020757654385055 + }, + "interp": { + "ns": 0.9454601961979108, + "wall_ns": 0.960283566488607, + "cpu_ns": 0.95777051292655, + "rss_bytes": 0.9966648137854364 + } + } + }, + "sumvm": { + "work": 2000000, + "base": { + "samples": [ + { + "ns": 2567333, + "wall_ns": 37906750, + "cpu_ns": 35800000, + "rss_bytes": 31473664 + }, + { + "ns": 2574458, + "wall_ns": 37739375, + "cpu_ns": 35482000, + "rss_bytes": 31506432 + }, + { + "ns": 2429333, + "wall_ns": 37107291, + "cpu_ns": 35170000, + "rss_bytes": 31408128 + }, + { + "ns": 2479375, + "wall_ns": 37509083, + "cpu_ns": 35594000, + "rss_bytes": 31539200 + }, + { + "ns": 2392708, + "wall_ns": 34452709, + "cpu_ns": 32371000, + "rss_bytes": 31408128 + } + ], + "ns": 2479375, + "wall_ns": 37509083, + "cpu_ns": 35482000, + "rss_bytes": 31473664 + }, + "new": { + "samples": [ + { + "ns": 2547042, + "wall_ns": 37986625, + "cpu_ns": 35524000, + "rss_bytes": 31653888 + }, + { + "ns": 2594917, + "wall_ns": 40807083, + "cpu_ns": 37622000, + "rss_bytes": 31604736 + }, + { + "ns": 2549833, + "wall_ns": 38448209, + "cpu_ns": 35609000, + "rss_bytes": 31604736 + }, + { + "ns": 2428042, + "wall_ns": 36480708, + "cpu_ns": 33897000, + "rss_bytes": 31571968 + }, + { + "ns": 2394625, + "wall_ns": 34450458, + "cpu_ns": 32228000, + "rss_bytes": 31506432 + } + ], + "ns": 2547042, + "wall_ns": 37986625, + "cpu_ns": 35524000, + "rss_bytes": 31604736 + }, + "base_interp": { + "samples": [ + { + "ns": 163253125, + "wall_ns": 196986459, + "cpu_ns": 194687000, + "rss_bytes": 29458432 + }, + { + "ns": 167145833, + "wall_ns": 202876541, + "cpu_ns": 200364000, + "rss_bytes": 29294592 + }, + { + "ns": 164965750, + "wall_ns": 201990542, + "cpu_ns": 199559000, + "rss_bytes": 29425664 + }, + { + "ns": 155839791, + "wall_ns": 189764250, + "cpu_ns": 187145000, + "rss_bytes": 29327360 + }, + { + "ns": 153425917, + "wall_ns": 185736083, + "cpu_ns": 183503000, + "rss_bytes": 29278208 + } + ], + "ns": 163253125, + "wall_ns": 196986459, + "cpu_ns": 194687000, + "rss_bytes": 29327360 + }, + "new_interp": { + "samples": [ + { + "ns": 159554500, + "wall_ns": 195520416, + "cpu_ns": 192999000, + "rss_bytes": 29278208 + }, + { + "ns": 165618917, + "wall_ns": 201377542, + "cpu_ns": 198785000, + "rss_bytes": 29196288 + }, + { + "ns": 166838708, + "wall_ns": 200915542, + "cpu_ns": 198033000, + "rss_bytes": 29310976 + }, + { + "ns": 149011458, + "wall_ns": 183545500, + "cpu_ns": 180413000, + "rss_bytes": 29245440 + }, + { + "ns": 146344583, + "wall_ns": 178997125, + "cpu_ns": 176372000, + "rss_bytes": 29245440 + } + ], + "ns": 159554500, + "wall_ns": 195520416, + "cpu_ns": 192999000, + "rss_bytes": 29245440 + }, + "cpython": { + "samples": [ + { + "ns": 47031541, + "wall_ns": 72887208, + "cpu_ns": 70415000, + "rss_bytes": 15155200 + }, + { + "ns": 47155417, + "wall_ns": 76564666, + "cpu_ns": 71766000, + "rss_bytes": 15089664 + }, + { + "ns": 43917958, + "wall_ns": 70836125, + "cpu_ns": 67088000, + "rss_bytes": 15122432 + }, + { + "ns": 42376667, + "wall_ns": 67293875, + "cpu_ns": 64457000, + "rss_bytes": 15106048 + }, + { + "ns": 42058583, + "wall_ns": 65865834, + "cpu_ns": 63446000, + "rss_bytes": 15187968 + } + ], + "ns": 43917958, + "wall_ns": 70836125, + "cpu_ns": 67088000, + "rss_bytes": 15122432 + }, + "comparisons": { + "jit": { + "ns": 1.000801184264858, + "wall_ns": 1.0021071445059258, + "cpu_ns": 0.9955824657872787, + "rss_bytes": 1.0031298904538342 + }, + "interp": { + "ns": 0.9773442315422752, + "wall_ns": 0.9925576458024458, + "cpu_ns": 0.991329672756784, + "rss_bytes": 0.9966442953020134 + } + } + }, + "nested_loops": { + "work": 120, + "base": { + "samples": [ + { + "ns": 3257625, + "wall_ns": 35908166, + "cpu_ns": 33983000, + "rss_bytes": 31571968 + }, + { + "ns": 3711541, + "wall_ns": 36899958, + "cpu_ns": 34424000, + "rss_bytes": 31653888 + }, + { + "ns": 3150834, + "wall_ns": 35701334, + "cpu_ns": 33600000, + "rss_bytes": 31637504 + }, + { + "ns": 3107000, + "wall_ns": 35638750, + "cpu_ns": 33591000, + "rss_bytes": 31604736 + }, + { + "ns": 3726083, + "wall_ns": 36858292, + "cpu_ns": 34700000, + "rss_bytes": 31653888 + } + ], + "ns": 3257625, + "wall_ns": 35908166, + "cpu_ns": 33983000, + "rss_bytes": 31637504 + }, + "new": { + "samples": [ + { + "ns": 3260541, + "wall_ns": 37805000, + "cpu_ns": 35719000, + "rss_bytes": 31571968 + }, + { + "ns": 3092209, + "wall_ns": 34999000, + "cpu_ns": 32775000, + "rss_bytes": 31522816 + }, + { + "ns": 3134084, + "wall_ns": 35937125, + "cpu_ns": 33572000, + "rss_bytes": 31457280 + }, + { + "ns": 2972250, + "wall_ns": 34926292, + "cpu_ns": 32529000, + "rss_bytes": 31571968 + }, + { + "ns": 3129750, + "wall_ns": 36318833, + "cpu_ns": 33932000, + "rss_bytes": 31637504 + } + ], + "ns": 3129750, + "wall_ns": 35937125, + "cpu_ns": 33572000, + "rss_bytes": 31571968 + }, + "base_interp": { + "samples": [ + { + "ns": 275139875, + "wall_ns": 307626625, + "cpu_ns": 305621000, + "rss_bytes": 29442048 + }, + { + "ns": 252721166, + "wall_ns": 283951875, + "cpu_ns": 281929000, + "rss_bytes": 29310976 + }, + { + "ns": 260226416, + "wall_ns": 293878166, + "cpu_ns": 289039000, + "rss_bytes": 29409280 + }, + { + "ns": 249707083, + "wall_ns": 281384792, + "cpu_ns": 279013000, + "rss_bytes": 29343744 + }, + { + "ns": 264699750, + "wall_ns": 302229959, + "cpu_ns": 299310000, + "rss_bytes": 29294592 + } + ], + "ns": 260226416, + "wall_ns": 293878166, + "cpu_ns": 289039000, + "rss_bytes": 29343744 + }, + "new_interp": { + "samples": [ + { + "ns": 256808125, + "wall_ns": 289246416, + "cpu_ns": 286304000, + "rss_bytes": 29196288 + }, + { + "ns": 263149750, + "wall_ns": 293971166, + "cpu_ns": 291808000, + "rss_bytes": 29278208 + }, + { + "ns": 259805125, + "wall_ns": 293424542, + "cpu_ns": 291406000, + "rss_bytes": 29360128 + }, + { + "ns": 244316042, + "wall_ns": 277994417, + "cpu_ns": 275112000, + "rss_bytes": 29310976 + }, + { + "ns": 265093459, + "wall_ns": 298977666, + "cpu_ns": 292939000, + "rss_bytes": 29360128 + } + ], + "ns": 259805125, + "wall_ns": 293424542, + "cpu_ns": 291406000, + "rss_bytes": 29310976 + }, + "cpython": { + "samples": [ + { + "ns": 38047834, + "wall_ns": 61311708, + "cpu_ns": 58867000, + "rss_bytes": 15122432 + }, + { + "ns": 42141166, + "wall_ns": 66119167, + "cpu_ns": 63915000, + "rss_bytes": 15040512 + }, + { + "ns": 41924584, + "wall_ns": 66052750, + "cpu_ns": 63785000, + "rss_bytes": 15106048 + }, + { + "ns": 37995167, + "wall_ns": 60941542, + "cpu_ns": 58565000, + "rss_bytes": 15106048 + }, + { + "ns": 38477416, + "wall_ns": 61279000, + "cpu_ns": 58790000, + "rss_bytes": 15220736 + } + ], + "ns": 38477416, + "wall_ns": 61311708, + "cpu_ns": 58867000, + "rss_bytes": 15106048 + }, + "comparisons": { + "jit": { + "ns": 0.9566301898937882, + "wall_ns": 0.9853639718302737, + "cpu_ns": 0.9778674351585014, + "rss_bytes": 0.9989631933644375 + }, + "interp": { + "ns": 0.9983810598229197, + "wall_ns": 0.9892390118743986, + "cpu_ns": 0.986018572611312, + "rss_bytes": 0.9988820570150923 + } + } + }, + "jitloop": { + "work": 1000, + "base": { + "samples": [ + { + "ns": 4832875, + "wall_ns": 58148125, + "cpu_ns": 47556000, + "rss_bytes": 31588352 + }, + { + "ns": 5364209, + "wall_ns": 65698000, + "cpu_ns": 50875000, + "rss_bytes": 31719424 + }, + { + "ns": 3928458, + "wall_ns": 36101459, + "cpu_ns": 34123000, + "rss_bytes": 31621120 + }, + { + "ns": 3938625, + "wall_ns": 36321959, + "cpu_ns": 34331000, + "rss_bytes": 31571968 + }, + { + "ns": 3743583, + "wall_ns": 34790959, + "cpu_ns": 32851000, + "rss_bytes": 31653888 + } + ], + "ns": 3938625, + "wall_ns": 36321959, + "cpu_ns": 34331000, + "rss_bytes": 31621120 + }, + "new": { + "samples": [ + { + "ns": 5316791, + "wall_ns": 51704000, + "cpu_ns": 48836000, + "rss_bytes": 31752192 + }, + { + "ns": 5056583, + "wall_ns": 55960917, + "cpu_ns": 51496000, + "rss_bytes": 31735808 + }, + { + "ns": 4068125, + "wall_ns": 37567125, + "cpu_ns": 35333000, + "rss_bytes": 31735808 + }, + { + "ns": 3923208, + "wall_ns": 36059167, + "cpu_ns": 33854000, + "rss_bytes": 31719424 + }, + { + "ns": 3900125, + "wall_ns": 35456375, + "cpu_ns": 33374000, + "rss_bytes": 31686656 + } + ], + "ns": 4068125, + "wall_ns": 37567125, + "cpu_ns": 35333000, + "rss_bytes": 31735808 + }, + "base_interp": { + "samples": [ + { + "ns": 463467917, + "wall_ns": 540125917, + "cpu_ns": 470808000, + "rss_bytes": 29491200 + }, + { + "ns": 385844250, + "wall_ns": 432118708, + "cpu_ns": 413750000, + "rss_bytes": 29573120 + }, + { + "ns": 298931833, + "wall_ns": 336618708, + "cpu_ns": 333959000, + "rss_bytes": 29392896 + }, + { + "ns": 280246333, + "wall_ns": 311466333, + "cpu_ns": 309423000, + "rss_bytes": 29278208 + }, + { + "ns": 279111875, + "wall_ns": 310238583, + "cpu_ns": 308253000, + "rss_bytes": 29278208 + } + ], + "ns": 298931833, + "wall_ns": 336618708, + "cpu_ns": 333959000, + "rss_bytes": 29392896 + }, + "new_interp": { + "samples": [ + { + "ns": 382242916, + "wall_ns": 419167792, + "cpu_ns": 386524000, + "rss_bytes": 29245440 + }, + { + "ns": 350335791, + "wall_ns": 390098250, + "cpu_ns": 384793000, + "rss_bytes": 29376512 + }, + { + "ns": 319831541, + "wall_ns": 361194458, + "cpu_ns": 358040000, + "rss_bytes": 29245440 + }, + { + "ns": 275802250, + "wall_ns": 307314792, + "cpu_ns": 305136000, + "rss_bytes": 29310976 + }, + { + "ns": 280279875, + "wall_ns": 313356667, + "cpu_ns": 311067000, + "rss_bytes": 29229056 + } + ], + "ns": 319831541, + "wall_ns": 361194458, + "cpu_ns": 358040000, + "rss_bytes": 29245440 + }, + "cpython": { + "samples": [ + { + "ns": 59347791, + "wall_ns": 87369208, + "cpu_ns": 84366000, + "rss_bytes": 15155200 + }, + { + "ns": 69202333, + "wall_ns": 97398875, + "cpu_ns": 93252000, + "rss_bytes": 15155200 + }, + { + "ns": 67698666, + "wall_ns": 95851167, + "cpu_ns": 92615000, + "rss_bytes": 15089664 + }, + { + "ns": 58908417, + "wall_ns": 82382458, + "cpu_ns": 80237000, + "rss_bytes": 15155200 + }, + { + "ns": 58414334, + "wall_ns": 82848000, + "cpu_ns": 80619000, + "rss_bytes": 15220736 + } + ], + "ns": 59347791, + "wall_ns": 87369208, + "cpu_ns": 84366000, + "rss_bytes": 15155200 + }, + "comparisons": { + "jit": { + "ns": 1.0355526265012889, + "wall_ns": 0.9927649276846549, + "cpu_ns": 1.0159203677209216, + "rss_bytes": 1.0036269430051814 + }, + "interp": { + "ns": 0.9841422260465402, + "wall_ns": 0.9866709799418353, + "cpu_ns": 0.9861451798993611, + "rss_bytes": 0.9949832775919732 + } + } + }, + "jitkernels": { + "work": 2000, + "base": { + "samples": [ + { + "ns": 30690000, + "wall_ns": 65072042, + "cpu_ns": 62792000, + "rss_bytes": 31817728 + }, + { + "ns": 30050583, + "wall_ns": 64423959, + "cpu_ns": 62340000, + "rss_bytes": 31850496 + }, + { + "ns": 29149667, + "wall_ns": 61617875, + "cpu_ns": 59535000, + "rss_bytes": 31899648 + }, + { + "ns": 29990375, + "wall_ns": 62241000, + "cpu_ns": 59939000, + "rss_bytes": 31719424 + }, + { + "ns": 33460583, + "wall_ns": 72471542, + "cpu_ns": 70030000, + "rss_bytes": 31817728 + } + ], + "ns": 30050583, + "wall_ns": 64423959, + "cpu_ns": 62340000, + "rss_bytes": 31817728 + }, + "new": { + "samples": [ + { + "ns": 29192459, + "wall_ns": 64801166, + "cpu_ns": 62533000, + "rss_bytes": 31784960 + }, + { + "ns": 27514708, + "wall_ns": 60021333, + "cpu_ns": 57743000, + "rss_bytes": 31768576 + }, + { + "ns": 27565416, + "wall_ns": 60215500, + "cpu_ns": 57941000, + "rss_bytes": 31834112 + }, + { + "ns": 27668000, + "wall_ns": 61466875, + "cpu_ns": 59138000, + "rss_bytes": 31801344 + }, + { + "ns": 32215250, + "wall_ns": 75115375, + "cpu_ns": 71639000, + "rss_bytes": 31784960 + } + ], + "ns": 27668000, + "wall_ns": 61466875, + "cpu_ns": 59138000, + "rss_bytes": 31784960 + }, + "base_interp": { + "samples": [ + { + "ns": 396656083, + "wall_ns": 430494459, + "cpu_ns": 428248000, + "rss_bytes": 29442048 + }, + { + "ns": 391798916, + "wall_ns": 423398750, + "cpu_ns": 421285000, + "rss_bytes": 29343744 + }, + { + "ns": 378878334, + "wall_ns": 410774709, + "cpu_ns": 408579000, + "rss_bytes": 29442048 + }, + { + "ns": 372553500, + "wall_ns": 403923541, + "cpu_ns": 401809000, + "rss_bytes": 29474816 + }, + { + "ns": 423287958, + "wall_ns": 456368334, + "cpu_ns": 446629000, + "rss_bytes": 29540352 + } + ], + "ns": 391798916, + "wall_ns": 423398750, + "cpu_ns": 421285000, + "rss_bytes": 29442048 + }, + "new_interp": { + "samples": [ + { + "ns": 367137459, + "wall_ns": 398483833, + "cpu_ns": 396175000, + "rss_bytes": 29310976 + }, + { + "ns": 406277042, + "wall_ns": 447926041, + "cpu_ns": 439761000, + "rss_bytes": 29360128 + }, + { + "ns": 381003791, + "wall_ns": 413785167, + "cpu_ns": 411513000, + "rss_bytes": 29376512 + }, + { + "ns": 387023083, + "wall_ns": 418777375, + "cpu_ns": 415467000, + "rss_bytes": 29294592 + }, + { + "ns": 379011541, + "wall_ns": 412662875, + "cpu_ns": 410154000, + "rss_bytes": 29229056 + } + ], + "ns": 381003791, + "wall_ns": 413785167, + "cpu_ns": 411513000, + "rss_bytes": 29310976 + }, + "cpython": { + "samples": [ + { + "ns": 30960209, + "wall_ns": 53277541, + "cpu_ns": 50892000, + "rss_bytes": 15335424 + }, + { + "ns": 33132792, + "wall_ns": 59634250, + "cpu_ns": 57021000, + "rss_bytes": 15384576 + }, + { + "ns": 32799334, + "wall_ns": 57541042, + "cpu_ns": 55324000, + "rss_bytes": 15400960 + }, + { + "ns": 32809500, + "wall_ns": 57052875, + "cpu_ns": 54415000, + "rss_bytes": 15351808 + }, + { + "ns": 31942167, + "wall_ns": 57516958, + "cpu_ns": 54960000, + "rss_bytes": 15368192 + } + ], + "ns": 32799334, + "wall_ns": 57516958, + "cpu_ns": 54960000, + "rss_bytes": 15368192 + }, + "comparisons": { + "jit": { + "ns": 0.9456511458604313, + "wall_ns": 0.987562458829389, + "cpu_ns": 0.9866364136872487, + "rss_bytes": 0.9989701338825953 + }, + "interp": { + "ns": 1.0056098668339266, + "wall_ns": 1.0073287325973128, + "cpu_ns": 1.0071809858069063, + "rss_bytes": 0.9955481357818586 + } + } + }, + "deltablue": { + "work": 50, + "base": { + "samples": [ + { + "ns": 1551756209, + "wall_ns": 1593317542, + "cpu_ns": 1587896000, + "rss_bytes": 38354944 + }, + { + "ns": 1685494666, + "wall_ns": 1731376375, + "cpu_ns": 1678906000, + "rss_bytes": 38436864 + }, + { + "ns": 2000090458, + "wall_ns": 2063049041, + "cpu_ns": 2036323000, + "rss_bytes": 38273024 + }, + { + "ns": 2089913291, + "wall_ns": 2150344459, + "cpu_ns": 2123779000, + "rss_bytes": 38699008 + }, + { + "ns": 2232675708, + "wall_ns": 2301195334, + "cpu_ns": 2283839000, + "rss_bytes": 38584320 + } + ], + "ns": 2000090458, + "wall_ns": 2063049041, + "cpu_ns": 2036323000, + "rss_bytes": 38436864 + }, + "new": { + "samples": [ + { + "ns": 1360949583, + "wall_ns": 1401141791, + "cpu_ns": 1392159000, + "rss_bytes": 38207488 + }, + { + "ns": 1464046875, + "wall_ns": 1520178708, + "cpu_ns": 1507633000, + "rss_bytes": 38338560 + }, + { + "ns": 2028707583, + "wall_ns": 2085006584, + "cpu_ns": 2056811000, + "rss_bytes": 38404096 + }, + { + "ns": 1734806500, + "wall_ns": 1789928916, + "cpu_ns": 1772583000, + "rss_bytes": 38436864 + }, + { + "ns": 2135629417, + "wall_ns": 2195031958, + "cpu_ns": 2031278000, + "rss_bytes": 38551552 + } + ], + "ns": 1734806500, + "wall_ns": 1789928916, + "cpu_ns": 1772583000, + "rss_bytes": 38404096 + }, + "base_interp": { + "samples": [ + { + "ns": 1001407083, + "wall_ns": 1046656709, + "cpu_ns": 1038479000, + "rss_bytes": 33947648 + }, + { + "ns": 1283239167, + "wall_ns": 1320755292, + "cpu_ns": 1143865000, + "rss_bytes": 33832960 + }, + { + "ns": 1415956500, + "wall_ns": 1471510167, + "cpu_ns": 1451836000, + "rss_bytes": 33980416 + }, + { + "ns": 1451441875, + "wall_ns": 1501083042, + "cpu_ns": 1481892000, + "rss_bytes": 33964032 + }, + { + "ns": 1649165834, + "wall_ns": 1717382625, + "cpu_ns": 1708417000, + "rss_bytes": 33832960 + } + ], + "ns": 1415956500, + "wall_ns": 1471510167, + "cpu_ns": 1451836000, + "rss_bytes": 33947648 + }, + "new_interp": { + "samples": [ + { + "ns": 989394458, + "wall_ns": 1029983875, + "cpu_ns": 1025055000, + "rss_bytes": 33800192 + }, + { + "ns": 2302575792, + "wall_ns": 2349354875, + "cpu_ns": 1532850000, + "rss_bytes": 33685504 + }, + { + "ns": 1631940000, + "wall_ns": 1689721708, + "cpu_ns": 1667071000, + "rss_bytes": 33882112 + }, + { + "ns": 1491420209, + "wall_ns": 1565361292, + "cpu_ns": 1541037000, + "rss_bytes": 33783808 + }, + { + "ns": 1743116375, + "wall_ns": 1797207542, + "cpu_ns": 1724031000, + "rss_bytes": 33849344 + } + ], + "ns": 1631940000, + "wall_ns": 1689721708, + "cpu_ns": 1541037000, + "rss_bytes": 33800192 + }, + "cpython": { + "samples": [ + { + "ns": 71095875, + "wall_ns": 103007833, + "cpu_ns": 100042000, + "rss_bytes": 16924672 + }, + { + "ns": 104277208, + "wall_ns": 212253916, + "cpu_ns": 143834000, + "rss_bytes": 16957440 + }, + { + "ns": 98272584, + "wall_ns": 143208041, + "cpu_ns": 138231000, + "rss_bytes": 17055744 + }, + { + "ns": 88096458, + "wall_ns": 137102541, + "cpu_ns": 127196000, + "rss_bytes": 16973824 + }, + { + "ns": 87545792, + "wall_ns": 128373375, + "cpu_ns": 123718000, + "rss_bytes": 17039360 + } + ], + "ns": 88096458, + "wall_ns": 137102541, + "cpu_ns": 127196000, + "rss_bytes": 16973824 + }, + "comparisons": { + "jit": { + "ns": 0.8770382712868526, + "wall_ns": 0.879386408588226, + "cpu_ns": 0.889413833461991, + "rss_bytes": 0.9974424552429667 + }, + "interp": { + "ns": 1.0569685225482304, + "wall_ns": 1.0464805663210899, + "cpu_ns": 1.0399118154359428, + "rss_bytes": 0.9956563706563707 + } + } + }, + "float_math": { + "work": 100000, + "base": { + "samples": [ + { + "ns": 632342208, + "wall_ns": 688006958, + "cpu_ns": 680928000, + "rss_bytes": 125517824 + }, + { + "ns": 623959625, + "wall_ns": 682271125, + "cpu_ns": 676250000, + "rss_bytes": 125714432 + }, + { + "ns": 646060000, + "wall_ns": 705247209, + "cpu_ns": 696623000, + "rss_bytes": 127156224 + }, + { + "ns": 640844958, + "wall_ns": 698242042, + "cpu_ns": 692271000, + "rss_bytes": 125452288 + }, + { + "ns": 615356042, + "wall_ns": 670834166, + "cpu_ns": 664358000, + "rss_bytes": 125681664 + } + ], + "ns": 632342208, + "wall_ns": 688006958, + "cpu_ns": 680928000, + "rss_bytes": 125681664 + }, + "new": { + "samples": [ + { + "ns": 656890125, + "wall_ns": 720547000, + "cpu_ns": 711615000, + "rss_bytes": 125747200 + }, + { + "ns": 644749917, + "wall_ns": 702520292, + "cpu_ns": 693797000, + "rss_bytes": 125714432 + }, + { + "ns": 659086958, + "wall_ns": 722020792, + "cpu_ns": 713612000, + "rss_bytes": 125665280 + }, + { + "ns": 756800541, + "wall_ns": 813209083, + "cpu_ns": 806604000, + "rss_bytes": 125779968 + }, + { + "ns": 603697083, + "wall_ns": 660722500, + "cpu_ns": 652873000, + "rss_bytes": 125812736 + } + ], + "ns": 656890125, + "wall_ns": 720547000, + "cpu_ns": 711615000, + "rss_bytes": 125747200 + }, + "base_interp": { + "samples": [ + { + "ns": 964753000, + "wall_ns": 1026665250, + "cpu_ns": 1014719000, + "rss_bytes": 122552320 + }, + { + "ns": 1018112667, + "wall_ns": 1068854959, + "cpu_ns": 1059318000, + "rss_bytes": 122535936 + }, + { + "ns": 904445541, + "wall_ns": 956579125, + "cpu_ns": 948625000, + "rss_bytes": 121438208 + }, + { + "ns": 882731208, + "wall_ns": 938181000, + "cpu_ns": 930356000, + "rss_bytes": 123158528 + }, + { + "ns": 806725250, + "wall_ns": 856248041, + "cpu_ns": 849413000, + "rss_bytes": 122552320 + } + ], + "ns": 904445541, + "wall_ns": 956579125, + "cpu_ns": 948625000, + "rss_bytes": 122552320 + }, + "new_interp": { + "samples": [ + { + "ns": 1041723875, + "wall_ns": 1111389958, + "cpu_ns": 1097657000, + "rss_bytes": 122568704 + }, + { + "ns": 1065390583, + "wall_ns": 1138360833, + "cpu_ns": 1124895000, + "rss_bytes": 123846656 + }, + { + "ns": 946654208, + "wall_ns": 1002713583, + "cpu_ns": 994169000, + "rss_bytes": 122748928 + }, + { + "ns": 921960791, + "wall_ns": 984951125, + "cpu_ns": 969726000, + "rss_bytes": 122470400 + }, + { + "ns": 810389750, + "wall_ns": 860268666, + "cpu_ns": 854470000, + "rss_bytes": 122437632 + } + ], + "ns": 946654208, + "wall_ns": 1002713583, + "cpu_ns": 994169000, + "rss_bytes": 122568704 + }, + "cpython": { + "samples": [ + { + "ns": 94580000, + "wall_ns": 138401333, + "cpu_ns": 134149000, + "rss_bytes": 36143104 + }, + { + "ns": 85521333, + "wall_ns": 136236125, + "cpu_ns": 128919000, + "rss_bytes": 36143104 + }, + { + "ns": 86075333, + "wall_ns": 126534875, + "cpu_ns": 122525000, + "rss_bytes": 36093952 + }, + { + "ns": 72697166, + "wall_ns": 111327208, + "cpu_ns": 105744000, + "rss_bytes": 36126720 + }, + { + "ns": 74983250, + "wall_ns": 110921834, + "cpu_ns": 108325000, + "rss_bytes": 36126720 + } + ], + "ns": 85521333, + "wall_ns": 126534875, + "cpu_ns": 122525000, + "rss_bytes": 36126720 + }, + "comparisons": { + "jit": { + "ns": 1.0333199315580717, + "wall_ns": 1.0296790619711482, + "cpu_ns": 1.025947504621072, + "rss_bytes": 1.0010428888019816 + }, + "interp": { + "ns": 1.0464368213189121, + "wall_ns": 1.049851920897993, + "cpu_ns": 1.0480105415733298, + "rss_bytes": 1.0001336898395723 + } + } + }, + "spectral_norm": { + "work": 100, + "base": { + "samples": [ + { + "ns": 194260167, + "wall_ns": 265450250, + "cpu_ns": 259700000, + "rss_bytes": 32014336 + }, + { + "ns": 162980500, + "wall_ns": 218763417, + "cpu_ns": 215032000, + "rss_bytes": 32063488 + }, + { + "ns": 147282833, + "wall_ns": 196534125, + "cpu_ns": 191300000, + "rss_bytes": 31866880 + }, + { + "ns": 142462125, + "wall_ns": 191623791, + "cpu_ns": 187873000, + "rss_bytes": 31801344 + }, + { + "ns": 127479791, + "wall_ns": 170147542, + "cpu_ns": 167189000, + "rss_bytes": 32014336 + } + ], + "ns": 147282833, + "wall_ns": 196534125, + "cpu_ns": 191300000, + "rss_bytes": 32014336 + }, + "new": { + "samples": [ + { + "ns": 213860500, + "wall_ns": 291282708, + "cpu_ns": 278859000, + "rss_bytes": 32079872 + }, + { + "ns": 149993666, + "wall_ns": 202279750, + "cpu_ns": 198301000, + "rss_bytes": 31997952 + }, + { + "ns": 140216500, + "wall_ns": 189721000, + "cpu_ns": 185636000, + "rss_bytes": 31981568 + }, + { + "ns": 154893791, + "wall_ns": 205322583, + "cpu_ns": 199930000, + "rss_bytes": 31916032 + }, + { + "ns": 129384166, + "wall_ns": 174431042, + "cpu_ns": 170998000, + "rss_bytes": 31981568 + } + ], + "ns": 149993666, + "wall_ns": 202279750, + "cpu_ns": 198301000, + "rss_bytes": 31981568 + }, + "base_interp": { + "samples": [ + { + "ns": 575013666, + "wall_ns": 624567875, + "cpu_ns": 582662000, + "rss_bytes": 29622272 + }, + { + "ns": 405448875, + "wall_ns": 453613125, + "cpu_ns": 449719000, + "rss_bytes": 29523968 + }, + { + "ns": 389779000, + "wall_ns": 435607833, + "cpu_ns": 431678000, + "rss_bytes": 29523968 + }, + { + "ns": 426075333, + "wall_ns": 474218042, + "cpu_ns": 468521000, + "rss_bytes": 29573120 + }, + { + "ns": 366913042, + "wall_ns": 409591375, + "cpu_ns": 405720000, + "rss_bytes": 29507584 + } + ], + "ns": 405448875, + "wall_ns": 453613125, + "cpu_ns": 449719000, + "rss_bytes": 29523968 + }, + "new_interp": { + "samples": [ + { + "ns": 421166625, + "wall_ns": 475815625, + "cpu_ns": 470101000, + "rss_bytes": 29376512 + }, + { + "ns": 398223500, + "wall_ns": 444989208, + "cpu_ns": 440598000, + "rss_bytes": 29392896 + }, + { + "ns": 408436792, + "wall_ns": 458702542, + "cpu_ns": 454374000, + "rss_bytes": 29360128 + }, + { + "ns": 389615000, + "wall_ns": 436563708, + "cpu_ns": 432093000, + "rss_bytes": 29458432 + }, + { + "ns": 371533917, + "wall_ns": 416780791, + "cpu_ns": 413265000, + "rss_bytes": 29573120 + } + ], + "ns": 398223500, + "wall_ns": 444989208, + "cpu_ns": 440598000, + "rss_bytes": 29392896 + }, + "cpython": { + "samples": [ + { + "ns": 61982750, + "wall_ns": 100366958, + "cpu_ns": 96838000, + "rss_bytes": 15286272 + }, + { + "ns": 53713667, + "wall_ns": 91991791, + "cpu_ns": 86711000, + "rss_bytes": 15286272 + }, + { + "ns": 54946083, + "wall_ns": 90633292, + "cpu_ns": 87019000, + "rss_bytes": 15384576 + }, + { + "ns": 54847125, + "wall_ns": 89740291, + "cpu_ns": 86183000, + "rss_bytes": 15302656 + }, + { + "ns": 54788792, + "wall_ns": 88882167, + "cpu_ns": 85309000, + "rss_bytes": 15466496 + } + ], + "ns": 54847125, + "wall_ns": 90633292, + "cpu_ns": 86711000, + "rss_bytes": 15302656 + }, + "comparisons": { + "jit": { + "ns": 1.0149386423139022, + "wall_ns": 1.0251752094073743, + "cpu_ns": 1.0227825993336883, + "rss_bytes": 1.0020470829068577 + }, + "interp": { + "ns": 0.9821793191558369, + "wall_ns": 0.9809883874061184, + "cpu_ns": 0.9797184464076457, + "rss_bytes": 0.9955604883462819 + } + } + }, + "json_bench": { + "work": 150, + "base": { + "samples": [ + { + "ns": 383818416, + "wall_ns": 476624792, + "cpu_ns": 472590000, + "rss_bytes": 45318144 + }, + { + "ns": 384305084, + "wall_ns": 475606333, + "cpu_ns": 471497000, + "rss_bytes": 44957696 + }, + { + "ns": 394822875, + "wall_ns": 497703875, + "cpu_ns": 493613000, + "rss_bytes": 45105152 + }, + { + "ns": 376625875, + "wall_ns": 471964833, + "cpu_ns": 467882000, + "rss_bytes": 45432832 + }, + { + "ns": 386908375, + "wall_ns": 477879000, + "cpu_ns": 474357000, + "rss_bytes": 45203456 + } + ], + "ns": 384305084, + "wall_ns": 476624792, + "cpu_ns": 472590000, + "rss_bytes": 45203456 + }, + "new": { + "samples": [ + { + "ns": 391857042, + "wall_ns": 489898333, + "cpu_ns": 485147000, + "rss_bytes": 44810240 + }, + { + "ns": 479780083, + "wall_ns": 592455292, + "cpu_ns": 579802000, + "rss_bytes": 45416448 + }, + { + "ns": 453576167, + "wall_ns": 573494000, + "cpu_ns": 568090000, + "rss_bytes": 45268992 + }, + { + "ns": 371771667, + "wall_ns": 461402083, + "cpu_ns": 456940000, + "rss_bytes": 44957696 + }, + { + "ns": 374901125, + "wall_ns": 464316083, + "cpu_ns": 460222000, + "rss_bytes": 44990464 + } + ], + "ns": 391857042, + "wall_ns": 489898333, + "cpu_ns": 485147000, + "rss_bytes": 44990464 + }, + "base_interp": { + "samples": [ + { + "ns": 393216583, + "wall_ns": 481614000, + "cpu_ns": 476691000, + "rss_bytes": 42139648 + }, + { + "ns": 452600584, + "wall_ns": 559794458, + "cpu_ns": 549811000, + "rss_bytes": 42369024 + }, + { + "ns": 527972917, + "wall_ns": 635241917, + "cpu_ns": 629327000, + "rss_bytes": 42221568 + }, + { + "ns": 362740750, + "wall_ns": 445814000, + "cpu_ns": 442084000, + "rss_bytes": 42156032 + }, + { + "ns": 375365583, + "wall_ns": 458431792, + "cpu_ns": 454603000, + "rss_bytes": 42418176 + } + ], + "ns": 393216583, + "wall_ns": 481614000, + "cpu_ns": 476691000, + "rss_bytes": 42221568 + }, + "new_interp": { + "samples": [ + { + "ns": 393946417, + "wall_ns": 484224417, + "cpu_ns": 479731000, + "rss_bytes": 42090496 + }, + { + "ns": 850783917, + "wall_ns": 957864042, + "cpu_ns": 765599000, + "rss_bytes": 42598400 + }, + { + "ns": 602495750, + "wall_ns": 745594750, + "cpu_ns": 732221000, + "rss_bytes": 42663936 + }, + { + "ns": 373877167, + "wall_ns": 456947125, + "cpu_ns": 452350000, + "rss_bytes": 42008576 + }, + { + "ns": 379060500, + "wall_ns": 470237833, + "cpu_ns": 465821000, + "rss_bytes": 42336256 + } + ], + "ns": 393946417, + "wall_ns": 484224417, + "cpu_ns": 479731000, + "rss_bytes": 42336256 + }, + "cpython": { + "samples": [ + { + "ns": 78730500, + "wall_ns": 113521375, + "cpu_ns": 110290000, + "rss_bytes": 15892480 + }, + { + "ns": 114173208, + "wall_ns": 168697209, + "cpu_ns": 163661000, + "rss_bytes": 16269312 + }, + { + "ns": 110948500, + "wall_ns": 163088541, + "cpu_ns": 156723000, + "rss_bytes": 16220160 + }, + { + "ns": 70121542, + "wall_ns": 104141750, + "cpu_ns": 98586000, + "rss_bytes": 16302080 + }, + { + "ns": 74884417, + "wall_ns": 107625250, + "cpu_ns": 104488000, + "rss_bytes": 16302080 + } + ], + "ns": 78730500, + "wall_ns": 113521375, + "cpu_ns": 110290000, + "rss_bytes": 16269312 + }, + "comparisons": { + "jit": { + "ns": 1.0209438256865715, + "wall_ns": 1.0278490360190915, + "cpu_ns": 1.0265706003089359, + "rss_bytes": 0.9952881478796666 + }, + "interp": { + "ns": 1.0307007608050653, + "wall_ns": 1.0257531026556728, + "cpu_ns": 1.0246764759581437, + "rss_bytes": 0.9988335925349923 + } + } + }, + "str_methods": { + "work": 15000, + "base": { + "samples": [ + { + "ns": 329397292, + "wall_ns": 377218959, + "cpu_ns": 373584000, + "rss_bytes": 32899072 + }, + { + "ns": 297497917, + "wall_ns": 340438166, + "cpu_ns": 337062000, + "rss_bytes": 32899072 + }, + { + "ns": 296175750, + "wall_ns": 344270375, + "cpu_ns": 335168000, + "rss_bytes": 32849920 + }, + { + "ns": 290417750, + "wall_ns": 332190750, + "cpu_ns": 328566000, + "rss_bytes": 32784384 + }, + { + "ns": 338728834, + "wall_ns": 385277166, + "cpu_ns": 381518000, + "rss_bytes": 32751616 + } + ], + "ns": 297497917, + "wall_ns": 344270375, + "cpu_ns": 337062000, + "rss_bytes": 32849920 + }, + "new": { + "samples": [ + { + "ns": 180092875, + "wall_ns": 226750500, + "cpu_ns": 223102000, + "rss_bytes": 32948224 + }, + { + "ns": 155201083, + "wall_ns": 197388667, + "cpu_ns": 193938000, + "rss_bytes": 32751616 + }, + { + "ns": 163070542, + "wall_ns": 213242333, + "cpu_ns": 208044000, + "rss_bytes": 32866304 + }, + { + "ns": 158923458, + "wall_ns": 199789292, + "cpu_ns": 196302000, + "rss_bytes": 32735232 + }, + { + "ns": 162690291, + "wall_ns": 205795791, + "cpu_ns": 202335000, + "rss_bytes": 33013760 + } + ], + "ns": 162690291, + "wall_ns": 205795791, + "cpu_ns": 202335000, + "rss_bytes": 32866304 + }, + "base_interp": { + "samples": [ + { + "ns": 307165750, + "wall_ns": 349332000, + "cpu_ns": 345564000, + "rss_bytes": 29491200 + }, + { + "ns": 291385833, + "wall_ns": 331849667, + "cpu_ns": 328273000, + "rss_bytes": 29507584 + }, + { + "ns": 333384834, + "wall_ns": 380526125, + "cpu_ns": 376495000, + "rss_bytes": 29556736 + }, + { + "ns": 292545666, + "wall_ns": 332873666, + "cpu_ns": 329279000, + "rss_bytes": 29556736 + }, + { + "ns": 294650125, + "wall_ns": 337818666, + "cpu_ns": 333767000, + "rss_bytes": 29556736 + } + ], + "ns": 294650125, + "wall_ns": 337818666, + "cpu_ns": 333767000, + "rss_bytes": 29556736 + }, + "new_interp": { + "samples": [ + { + "ns": 161228083, + "wall_ns": 208154458, + "cpu_ns": 205042000, + "rss_bytes": 29343744 + }, + { + "ns": 155548417, + "wall_ns": 195005166, + "cpu_ns": 191762000, + "rss_bytes": 29278208 + }, + { + "ns": 159482875, + "wall_ns": 201021333, + "cpu_ns": 197510000, + "rss_bytes": 29310976 + }, + { + "ns": 153459583, + "wall_ns": 195120042, + "cpu_ns": 191637000, + "rss_bytes": 29343744 + }, + { + "ns": 152647125, + "wall_ns": 194077334, + "cpu_ns": 190806000, + "rss_bytes": 29310976 + } + ], + "ns": 155548417, + "wall_ns": 195120042, + "cpu_ns": 191762000, + "rss_bytes": 29310976 + }, + "cpython": { + "samples": [ + { + "ns": 56309333, + "wall_ns": 90031500, + "cpu_ns": 86489000, + "rss_bytes": 15237120 + }, + { + "ns": 47513000, + "wall_ns": 76610292, + "cpu_ns": 73634000, + "rss_bytes": 15155200 + }, + { + "ns": 47440334, + "wall_ns": 76356583, + "cpu_ns": 73459000, + "rss_bytes": 15187968 + }, + { + "ns": 48903958, + "wall_ns": 81228209, + "cpu_ns": 76655000, + "rss_bytes": 15237120 + }, + { + "ns": 49641166, + "wall_ns": 80747458, + "cpu_ns": 77389000, + "rss_bytes": 15155200 + } + ], + "ns": 48903958, + "wall_ns": 80747458, + "cpu_ns": 76655000, + "rss_bytes": 15187968 + }, + "comparisons": { + "jit": { + "ns": 0.5467345341746161, + "wall_ns": 0.6011110910255176, + "cpu_ns": 0.5971936699644524, + "rss_bytes": 1.000498753117207 + }, + "interp": { + "ns": 0.5245662501115296, + "wall_ns": 0.5861684534696716, + "cpu_ns": 0.5819897412224891, + "rss_bytes": 0.9922265408106608 + } + } + }, + "dict_ops": { + "work": 100000, + "base": { + "samples": [ + { + "ns": 283389333, + "wall_ns": 331130041, + "cpu_ns": 326090000, + "rss_bytes": 31653888 + }, + { + "ns": 277032875, + "wall_ns": 317506000, + "cpu_ns": 314328000, + "rss_bytes": 31473664 + }, + { + "ns": 276467500, + "wall_ns": 316883125, + "cpu_ns": 313852000, + "rss_bytes": 31604736 + }, + { + "ns": 275773583, + "wall_ns": 316467292, + "cpu_ns": 313423000, + "rss_bytes": 31506432 + }, + { + "ns": 286120709, + "wall_ns": 330526667, + "cpu_ns": 326527000, + "rss_bytes": 31457280 + } + ], + "ns": 277032875, + "wall_ns": 317506000, + "cpu_ns": 314328000, + "rss_bytes": 31506432 + }, + "new": { + "samples": [ + { + "ns": 294648792, + "wall_ns": 339237750, + "cpu_ns": 335460000, + "rss_bytes": 31571968 + }, + { + "ns": 275229375, + "wall_ns": 315664042, + "cpu_ns": 311952000, + "rss_bytes": 31457280 + }, + { + "ns": 271608625, + "wall_ns": 312086334, + "cpu_ns": 308851000, + "rss_bytes": 31473664 + }, + { + "ns": 281947334, + "wall_ns": 322716209, + "cpu_ns": 320026000, + "rss_bytes": 31440896 + }, + { + "ns": 287942167, + "wall_ns": 329036833, + "cpu_ns": 325807000, + "rss_bytes": 31342592 + } + ], + "ns": 281947334, + "wall_ns": 322716209, + "cpu_ns": 320026000, + "rss_bytes": 31457280 + }, + "base_interp": { + "samples": [ + { + "ns": 326213542, + "wall_ns": 373201833, + "cpu_ns": 368631000, + "rss_bytes": 29605888 + }, + { + "ns": 275262625, + "wall_ns": 314672375, + "cpu_ns": 311585000, + "rss_bytes": 29589504 + }, + { + "ns": 275970709, + "wall_ns": 315197750, + "cpu_ns": 312023000, + "rss_bytes": 29622272 + }, + { + "ns": 325948375, + "wall_ns": 366105000, + "cpu_ns": 355989000, + "rss_bytes": 29573120 + }, + { + "ns": 291388709, + "wall_ns": 334465709, + "cpu_ns": 328480000, + "rss_bytes": 29507584 + } + ], + "ns": 291388709, + "wall_ns": 334465709, + "cpu_ns": 328480000, + "rss_bytes": 29589504 + }, + "new_interp": { + "samples": [ + { + "ns": 328982708, + "wall_ns": 375759209, + "cpu_ns": 371859000, + "rss_bytes": 29491200 + }, + { + "ns": 273460417, + "wall_ns": 313456750, + "cpu_ns": 310620000, + "rss_bytes": 29556736 + }, + { + "ns": 274224208, + "wall_ns": 313910750, + "cpu_ns": 310113000, + "rss_bytes": 29442048 + }, + { + "ns": 288486833, + "wall_ns": 330652333, + "cpu_ns": 326495000, + "rss_bytes": 29474816 + }, + { + "ns": 291921583, + "wall_ns": 334523000, + "cpu_ns": 328873000, + "rss_bytes": 29376512 + } + ], + "ns": 288486833, + "wall_ns": 330652333, + "cpu_ns": 326495000, + "rss_bytes": 29474816 + }, + "cpython": { + "samples": [ + { + "ns": 54931250, + "wall_ns": 88360875, + "cpu_ns": 85136000, + "rss_bytes": 15286272 + }, + { + "ns": 45670292, + "wall_ns": 76767667, + "cpu_ns": 71960000, + "rss_bytes": 15286272 + }, + { + "ns": 47387792, + "wall_ns": 75915625, + "cpu_ns": 73055000, + "rss_bytes": 15286272 + }, + { + "ns": 48889125, + "wall_ns": 78836833, + "cpu_ns": 75525000, + "rss_bytes": 15515648 + }, + { + "ns": 49080333, + "wall_ns": 79241208, + "cpu_ns": 76113000, + "rss_bytes": 15237120 + } + ], + "ns": 48889125, + "wall_ns": 78836833, + "cpu_ns": 75525000, + "rss_bytes": 15286272 + }, + "comparisons": { + "jit": { + "ns": 1.0063660474153235, + "wall_ns": 0.9954925452353894, + "cpu_ns": 0.9977949756069177, + "rss_bytes": 0.9974120082815735 + }, + "interp": { + "ns": 0.993671426194727, + "wall_ns": 0.9961368550385142, + "cpu_ns": 0.9969029317842644, + "rss_bytes": 0.9961261759822911 + } + } + }, + "list_ops": { + "work": 10000, + "base": { + "samples": [ + { + "ns": 440560375, + "wall_ns": 483685875, + "cpu_ns": 478909000, + "rss_bytes": 31440896 + }, + { + "ns": 456671208, + "wall_ns": 497804917, + "cpu_ns": 493979000, + "rss_bytes": 31522816 + }, + { + "ns": 482050875, + "wall_ns": 529515291, + "cpu_ns": 524608000, + "rss_bytes": 31621120 + }, + { + "ns": 480449791, + "wall_ns": 526584917, + "cpu_ns": 522329000, + "rss_bytes": 31490048 + }, + { + "ns": 440657875, + "wall_ns": 481308000, + "cpu_ns": 477524000, + "rss_bytes": 31539200 + } + ], + "ns": 456671208, + "wall_ns": 497804917, + "cpu_ns": 493979000, + "rss_bytes": 31522816 + }, + "new": { + "samples": [ + { + "ns": 445574167, + "wall_ns": 488443209, + "cpu_ns": 483732000, + "rss_bytes": 31358976 + }, + { + "ns": 462489083, + "wall_ns": 504746833, + "cpu_ns": 500974000, + "rss_bytes": 31293440 + }, + { + "ns": 468982333, + "wall_ns": 510332791, + "cpu_ns": 505203000, + "rss_bytes": 31440896 + }, + { + "ns": 479586583, + "wall_ns": 522187791, + "cpu_ns": 518136000, + "rss_bytes": 31473664 + }, + { + "ns": 436772542, + "wall_ns": 477501708, + "cpu_ns": 473916000, + "rss_bytes": 31326208 + } + ], + "ns": 462489083, + "wall_ns": 504746833, + "cpu_ns": 500974000, + "rss_bytes": 31358976 + }, + "base_interp": { + "samples": [ + { + "ns": 455656958, + "wall_ns": 496686084, + "cpu_ns": 492320000, + "rss_bytes": 29523968 + }, + { + "ns": 475705917, + "wall_ns": 516222250, + "cpu_ns": 512162000, + "rss_bytes": 29425664 + }, + { + "ns": 461772416, + "wall_ns": 502387916, + "cpu_ns": 499310000, + "rss_bytes": 29540352 + }, + { + "ns": 526020292, + "wall_ns": 572957958, + "cpu_ns": 569039000, + "rss_bytes": 29573120 + }, + { + "ns": 460865042, + "wall_ns": 503814833, + "cpu_ns": 499071000, + "rss_bytes": 29491200 + } + ], + "ns": 461772416, + "wall_ns": 503814833, + "cpu_ns": 499310000, + "rss_bytes": 29523968 + }, + "new_interp": { + "samples": [ + { + "ns": 487022833, + "wall_ns": 530053542, + "cpu_ns": 525675000, + "rss_bytes": 29327360 + }, + { + "ns": 471369959, + "wall_ns": 514867000, + "cpu_ns": 509454000, + "rss_bytes": 29458432 + }, + { + "ns": 462954959, + "wall_ns": 503089458, + "cpu_ns": 498964000, + "rss_bytes": 29327360 + }, + { + "ns": 464193333, + "wall_ns": 508944000, + "cpu_ns": 504004000, + "rss_bytes": 29392896 + }, + { + "ns": 462145667, + "wall_ns": 501708833, + "cpu_ns": 497944000, + "rss_bytes": 29294592 + } + ], + "ns": 464193333, + "wall_ns": 508944000, + "cpu_ns": 504004000, + "rss_bytes": 29327360 + }, + "cpython": { + "samples": [ + { + "ns": 33775833, + "wall_ns": 64259458, + "cpu_ns": 61487000, + "rss_bytes": 15253504 + }, + { + "ns": 31828625, + "wall_ns": 62153792, + "cpu_ns": 58972000, + "rss_bytes": 15220736 + }, + { + "ns": 32256667, + "wall_ns": 62264375, + "cpu_ns": 59855000, + "rss_bytes": 15319040 + }, + { + "ns": 31760458, + "wall_ns": 63553625, + "cpu_ns": 58739000, + "rss_bytes": 15204352 + }, + { + "ns": 31557709, + "wall_ns": 60223083, + "cpu_ns": 58045000, + "rss_bytes": 15220736 + } + ], + "ns": 31828625, + "wall_ns": 62264375, + "cpu_ns": 58972000, + "rss_bytes": 15220736 + }, + "comparisons": { + "jit": { + "ns": 0.9982033335924586, + "wall_ns": 0.9920917749133611, + "cpu_ns": 0.9924443588175673, + "rss_bytes": 0.994300518134715 + }, + "interp": { + "ns": 1.002560878387331, + "wall_ns": 0.9973746772828951, + "cpu_ns": 0.997741804272338, + "rss_bytes": 0.9933407325194229 + } + } + }, + "attr_access": { + "work": 200000, + "base": { + "samples": [ + { + "ns": 158495958, + "wall_ns": 198994959, + "cpu_ns": 195930000, + "rss_bytes": 33488896 + }, + { + "ns": 155290000, + "wall_ns": 196694042, + "cpu_ns": 193685000, + "rss_bytes": 33685504 + }, + { + "ns": 153872625, + "wall_ns": 195411250, + "cpu_ns": 192274000, + "rss_bytes": 33636352 + }, + { + "ns": 174931500, + "wall_ns": 218412583, + "cpu_ns": 215483000, + "rss_bytes": 33538048 + }, + { + "ns": 148940209, + "wall_ns": 190095625, + "cpu_ns": 186826000, + "rss_bytes": 33521664 + } + ], + "ns": 155290000, + "wall_ns": 196694042, + "cpu_ns": 193685000, + "rss_bytes": 33538048 + }, + "new": { + "samples": [ + { + "ns": 155340833, + "wall_ns": 197472792, + "cpu_ns": 194068000, + "rss_bytes": 33538048 + }, + { + "ns": 160902750, + "wall_ns": 201111750, + "cpu_ns": 197833000, + "rss_bytes": 33636352 + }, + { + "ns": 151646417, + "wall_ns": 200189334, + "cpu_ns": 189438000, + "rss_bytes": 33570816 + }, + { + "ns": 177412667, + "wall_ns": 225364583, + "cpu_ns": 222098000, + "rss_bytes": 33570816 + }, + { + "ns": 151225541, + "wall_ns": 192007792, + "cpu_ns": 188824000, + "rss_bytes": 33685504 + } + ], + "ns": 155340833, + "wall_ns": 200189334, + "cpu_ns": 194068000, + "rss_bytes": 33570816 + }, + "base_interp": { + "samples": [ + { + "ns": 418229667, + "wall_ns": 458373083, + "cpu_ns": 454674000, + "rss_bytes": 29409280 + }, + { + "ns": 416307250, + "wall_ns": 455833708, + "cpu_ns": 452217000, + "rss_bytes": 29622272 + }, + { + "ns": 414541625, + "wall_ns": 455842500, + "cpu_ns": 452292000, + "rss_bytes": 29540352 + }, + { + "ns": 430542250, + "wall_ns": 474285250, + "cpu_ns": 470548000, + "rss_bytes": 29360128 + }, + { + "ns": 398260667, + "wall_ns": 439238167, + "cpu_ns": 435002000, + "rss_bytes": 29474816 + } + ], + "ns": 416307250, + "wall_ns": 455842500, + "cpu_ns": 452292000, + "rss_bytes": 29474816 + }, + "new_interp": { + "samples": [ + { + "ns": 443232958, + "wall_ns": 489222792, + "cpu_ns": 485198000, + "rss_bytes": 29442048 + }, + { + "ns": 420595292, + "wall_ns": 460744500, + "cpu_ns": 456980000, + "rss_bytes": 29343744 + }, + { + "ns": 455626083, + "wall_ns": 501603583, + "cpu_ns": 496799000, + "rss_bytes": 29474816 + }, + { + "ns": 403212750, + "wall_ns": 443877750, + "cpu_ns": 439900000, + "rss_bytes": 29474816 + }, + { + "ns": 397570458, + "wall_ns": 436811334, + "cpu_ns": 433220000, + "rss_bytes": 29392896 + } + ], + "ns": 420595292, + "wall_ns": 460744500, + "cpu_ns": 456980000, + "rss_bytes": 29442048 + }, + "cpython": { + "samples": [ + { + "ns": 46183125, + "wall_ns": 78624375, + "cpu_ns": 75159000, + "rss_bytes": 15319040 + }, + { + "ns": 44488542, + "wall_ns": 82700958, + "cpu_ns": 75561000, + "rss_bytes": 15253504 + }, + { + "ns": 44920458, + "wall_ns": 75769750, + "cpu_ns": 72715000, + "rss_bytes": 15319040 + }, + { + "ns": 40299084, + "wall_ns": 69146125, + "cpu_ns": 66304000, + "rss_bytes": 15138816 + }, + { + "ns": 40339833, + "wall_ns": 69036333, + "cpu_ns": 66093000, + "rss_bytes": 15204352 + } + ], + "ns": 44488542, + "wall_ns": 75769750, + "cpu_ns": 72715000, + "rss_bytes": 15253504 + }, + "comparisons": { + "jit": { + "ns": 1.014183649028334, + "wall_ns": 1.022459795706471, + "cpu_ns": 1.0106944429576183, + "rss_bytes": 1.0009770395701025 + }, + "interp": { + "ns": 1.0103001857402194, + "wall_ns": 1.010773209426627, + "cpu_ns": 1.0105325540614352, + "rss_bytes": 0.9977814753189129 + } + } + }, + "call_overhead": { + "work": 150000, + "base": { + "samples": [ + { + "ns": 523330500, + "wall_ns": 566514333, + "cpu_ns": 562455000, + "rss_bytes": 31768576 + }, + { + "ns": 510968959, + "wall_ns": 553110667, + "cpu_ns": 550023000, + "rss_bytes": 31670272 + }, + { + "ns": 584101125, + "wall_ns": 628517959, + "cpu_ns": 623008000, + "rss_bytes": 31752192 + }, + { + "ns": 543469084, + "wall_ns": 586894083, + "cpu_ns": 582845000, + "rss_bytes": 31719424 + }, + { + "ns": 555340000, + "wall_ns": 599012792, + "cpu_ns": 593638000, + "rss_bytes": 31539200 + } + ], + "ns": 543469084, + "wall_ns": 586894083, + "cpu_ns": 582845000, + "rss_bytes": 31719424 + }, + "new": { + "samples": [ + { + "ns": 660514333, + "wall_ns": 719339584, + "cpu_ns": 696833000, + "rss_bytes": 31555584 + }, + { + "ns": 507967875, + "wall_ns": 549707292, + "cpu_ns": 545377000, + "rss_bytes": 31637504 + }, + { + "ns": 519748792, + "wall_ns": 561081000, + "cpu_ns": 557138000, + "rss_bytes": 31571968 + }, + { + "ns": 518309125, + "wall_ns": 560813459, + "cpu_ns": 556617000, + "rss_bytes": 31621120 + }, + { + "ns": 512656167, + "wall_ns": 554324541, + "cpu_ns": 550006000, + "rss_bytes": 31621120 + } + ], + "ns": 518309125, + "wall_ns": 560813459, + "cpu_ns": 556617000, + "rss_bytes": 31621120 + }, + "base_interp": { + "samples": [ + { + "ns": 644016625, + "wall_ns": 686900000, + "cpu_ns": 681312000, + "rss_bytes": 29523968 + }, + { + "ns": 618706709, + "wall_ns": 657872458, + "cpu_ns": 654252000, + "rss_bytes": 29573120 + }, + { + "ns": 644866125, + "wall_ns": 689419042, + "cpu_ns": 685681000, + "rss_bytes": 29523968 + }, + { + "ns": 646296500, + "wall_ns": 686338792, + "cpu_ns": 682243000, + "rss_bytes": 29458432 + }, + { + "ns": 631941333, + "wall_ns": 671993583, + "cpu_ns": 667758000, + "rss_bytes": 29507584 + } + ], + "ns": 644016625, + "wall_ns": 686338792, + "cpu_ns": 681312000, + "rss_bytes": 29523968 + }, + "new_interp": { + "samples": [ + { + "ns": 643415792, + "wall_ns": 682644500, + "cpu_ns": 678265000, + "rss_bytes": 29458432 + }, + { + "ns": 633121750, + "wall_ns": 673405042, + "cpu_ns": 669674000, + "rss_bytes": 29392896 + }, + { + "ns": 688570375, + "wall_ns": 731362000, + "cpu_ns": 726206000, + "rss_bytes": 29409280 + }, + { + "ns": 750814958, + "wall_ns": 807325042, + "cpu_ns": 796680000, + "rss_bytes": 29310976 + }, + { + "ns": 668098083, + "wall_ns": 714097375, + "cpu_ns": 709721000, + "rss_bytes": 29278208 + } + ], + "ns": 668098083, + "wall_ns": 714097375, + "cpu_ns": 709721000, + "rss_bytes": 29392896 + }, + "cpython": { + "samples": [ + { + "ns": 62579583, + "wall_ns": 92803792, + "cpu_ns": 89532000, + "rss_bytes": 15384576 + }, + { + "ns": 63154916, + "wall_ns": 93841709, + "cpu_ns": 91269000, + "rss_bytes": 15253504 + }, + { + "ns": 64432959, + "wall_ns": 95520458, + "cpu_ns": 91620000, + "rss_bytes": 15269888 + }, + { + "ns": 72524791, + "wall_ns": 109430292, + "cpu_ns": 103204000, + "rss_bytes": 15220736 + }, + { + "ns": 72405417, + "wall_ns": 106953375, + "cpu_ns": 103359000, + "rss_bytes": 15335424 + } + ], + "ns": 64432959, + "wall_ns": 95520458, + "cpu_ns": 91620000, + "rss_bytes": 15269888 + }, + "comparisons": { + "jit": { + "ns": 0.9537048937267607, + "wall_ns": 0.9555616170694977, + "cpu_ns": 0.9550000428930505, + "rss_bytes": 0.996900826446281 + }, + "interp": { + "ns": 1.0572153586288682, + "wall_ns": 1.0608381194089502, + "cpu_ns": 1.0591018272345303, + "rss_bytes": 0.9949944382647385 + } + } + }, + "generators": { + "work": 300000, + "base": { + "samples": [ + { + "ns": 386732041, + "wall_ns": 430829292, + "cpu_ns": 426194000, + "rss_bytes": 31768576 + }, + { + "ns": 379867500, + "wall_ns": 422042583, + "cpu_ns": 418171000, + "rss_bytes": 31735808 + }, + { + "ns": 401486791, + "wall_ns": 444696500, + "cpu_ns": 440248000, + "rss_bytes": 31719424 + }, + { + "ns": 425257708, + "wall_ns": 471787875, + "cpu_ns": 467045000, + "rss_bytes": 31735808 + }, + { + "ns": 358447916, + "wall_ns": 398840083, + "cpu_ns": 395415000, + "rss_bytes": 31670272 + } + ], + "ns": 386732041, + "wall_ns": 430829292, + "cpu_ns": 426194000, + "rss_bytes": 31735808 + }, + "new": { + "samples": [ + { + "ns": 386669833, + "wall_ns": 431210916, + "cpu_ns": 426521000, + "rss_bytes": 31735808 + }, + { + "ns": 364421875, + "wall_ns": 404947584, + "cpu_ns": 401122000, + "rss_bytes": 31784960 + }, + { + "ns": 390573209, + "wall_ns": 431310625, + "cpu_ns": 427749000, + "rss_bytes": 31703040 + }, + { + "ns": 438076500, + "wall_ns": 484629750, + "cpu_ns": 478855000, + "rss_bytes": 31686656 + }, + { + "ns": 357055167, + "wall_ns": 397704041, + "cpu_ns": 393897000, + "rss_bytes": 31735808 + } + ], + "ns": 386669833, + "wall_ns": 431210916, + "cpu_ns": 426521000, + "rss_bytes": 31735808 + }, + "base_interp": { + "samples": [ + { + "ns": 474507000, + "wall_ns": 517723958, + "cpu_ns": 513571000, + "rss_bytes": 29507584 + }, + { + "ns": 437971125, + "wall_ns": 477969708, + "cpu_ns": 474126000, + "rss_bytes": 29458432 + }, + { + "ns": 441018541, + "wall_ns": 480788667, + "cpu_ns": 477223000, + "rss_bytes": 29491200 + }, + { + "ns": 497025625, + "wall_ns": 543684916, + "cpu_ns": 539488000, + "rss_bytes": 29507584 + }, + { + "ns": 434359125, + "wall_ns": 475397916, + "cpu_ns": 471956000, + "rss_bytes": 29458432 + } + ], + "ns": 441018541, + "wall_ns": 480788667, + "cpu_ns": 477223000, + "rss_bytes": 29491200 + }, + "new_interp": { + "samples": [ + { + "ns": 481354458, + "wall_ns": 527972750, + "cpu_ns": 524044000, + "rss_bytes": 29392896 + }, + { + "ns": 424038833, + "wall_ns": 464927416, + "cpu_ns": 460716000, + "rss_bytes": 29360128 + }, + { + "ns": 422883250, + "wall_ns": 462974458, + "cpu_ns": 459012000, + "rss_bytes": 29343744 + }, + { + "ns": 483424500, + "wall_ns": 530962958, + "cpu_ns": 525303000, + "rss_bytes": 29376512 + }, + { + "ns": 430866083, + "wall_ns": 473447666, + "cpu_ns": 469624000, + "rss_bytes": 29458432 + } + ], + "ns": 430866083, + "wall_ns": 473447666, + "cpu_ns": 469624000, + "rss_bytes": 29376512 + }, + "cpython": { + "samples": [ + { + "ns": 43275833, + "wall_ns": 76388791, + "cpu_ns": 72977000, + "rss_bytes": 15220736 + }, + { + "ns": 37929667, + "wall_ns": 69764000, + "cpu_ns": 65156000, + "rss_bytes": 15253504 + }, + { + "ns": 37423958, + "wall_ns": 66876000, + "cpu_ns": 63681000, + "rss_bytes": 15204352 + }, + { + "ns": 39185958, + "wall_ns": 71154792, + "cpu_ns": 68184000, + "rss_bytes": 15138816 + }, + { + "ns": 39848500, + "wall_ns": 71317750, + "cpu_ns": 68286000, + "rss_bytes": 15286272 + } + ], + "ns": 39185958, + "wall_ns": 71154792, + "cpu_ns": 68184000, + "rss_bytes": 15220736 + }, + "comparisons": { + "jit": { + "ns": 0.9961145010534808, + "wall_ns": 0.9971516353335028, + "cpu_ns": 0.9961609954098858, + "rss_bytes": 0.9994834710743802 + }, + "interp": { + "ns": 0.9726349622315751, + "wall_ns": 0.9766004948351372, + "cpu_ns": 0.97370655139688, + "rss_bytes": 0.9961132704053304 + } + } + }, + "deque_ops": { + "work": 200000, + "base": { + "samples": [ + { + "ns": 1183097000, + "wall_ns": 1231227209, + "cpu_ns": 1194223000, + "rss_bytes": 50249728 + }, + { + "ns": 1299033708, + "wall_ns": 1349877208, + "cpu_ns": 1321403000, + "rss_bytes": 50085888 + }, + { + "ns": 1036583125, + "wall_ns": 1086906167, + "cpu_ns": 1084030000, + "rss_bytes": 50282496 + }, + { + "ns": 1001998292, + "wall_ns": 1048269209, + "cpu_ns": 1044822000, + "rss_bytes": 50380800 + }, + { + "ns": 1062039667, + "wall_ns": 1110167958, + "cpu_ns": 1107181000, + "rss_bytes": 50249728 + } + ], + "ns": 1062039667, + "wall_ns": 1110167958, + "cpu_ns": 1107181000, + "rss_bytes": 50249728 + }, + "new": { + "samples": [ + { + "ns": 1015137958, + "wall_ns": 1063330667, + "cpu_ns": 1054200000, + "rss_bytes": 50233344 + }, + { + "ns": 1065081500, + "wall_ns": 1112616417, + "cpu_ns": 1109607000, + "rss_bytes": 50216960 + }, + { + "ns": 1039425584, + "wall_ns": 1083706417, + "cpu_ns": 1080630000, + "rss_bytes": 50233344 + }, + { + "ns": 1013245833, + "wall_ns": 1056452792, + "cpu_ns": 1054628000, + "rss_bytes": 50249728 + }, + { + "ns": 1005214916, + "wall_ns": 1050727500, + "cpu_ns": 1047277000, + "rss_bytes": 50151424 + } + ], + "ns": 1015137958, + "wall_ns": 1063330667, + "cpu_ns": 1054628000, + "rss_bytes": 50233344 + }, + "base_interp": { + "samples": [ + { + "ns": 1140273916, + "wall_ns": 1226528667, + "cpu_ns": 1194604000, + "rss_bytes": 48070656 + }, + { + "ns": 1052069125, + "wall_ns": 1100986250, + "cpu_ns": 1097332000, + "rss_bytes": 47890432 + }, + { + "ns": 1001670959, + "wall_ns": 1044339958, + "cpu_ns": 1041385000, + "rss_bytes": 47906816 + }, + { + "ns": 1022562750, + "wall_ns": 1065139417, + "cpu_ns": 1062240000, + "rss_bytes": 47906816 + }, + { + "ns": 1019618375, + "wall_ns": 1063223916, + "cpu_ns": 1060392000, + "rss_bytes": 47890432 + } + ], + "ns": 1022562750, + "wall_ns": 1065139417, + "cpu_ns": 1062240000, + "rss_bytes": 47906816 + }, + "new_interp": { + "samples": [ + { + "ns": 1536737875, + "wall_ns": 1604176875, + "cpu_ns": 1495122000, + "rss_bytes": 47988736 + }, + { + "ns": 995850250, + "wall_ns": 1038534667, + "cpu_ns": 1033338000, + "rss_bytes": 47939584 + }, + { + "ns": 963038042, + "wall_ns": 1009611291, + "cpu_ns": 1004034000, + "rss_bytes": 48054272 + }, + { + "ns": 1062718375, + "wall_ns": 1108694000, + "cpu_ns": 1104671000, + "rss_bytes": 47923200 + }, + { + "ns": 1012294084, + "wall_ns": 1056938125, + "cpu_ns": 1053565000, + "rss_bytes": 47857664 + } + ], + "ns": 1012294084, + "wall_ns": 1056938125, + "cpu_ns": 1053565000, + "rss_bytes": 47939584 + }, + "cpython": { + "samples": [ + { + "ns": 51707750, + "wall_ns": 86378541, + "cpu_ns": 82976000, + "rss_bytes": 23789568 + }, + { + "ns": 35645834, + "wall_ns": 67737916, + "cpu_ns": 60415000, + "rss_bytes": 23642112 + }, + { + "ns": 35311042, + "wall_ns": 59909209, + "cpu_ns": 57393000, + "rss_bytes": 23756800 + }, + { + "ns": 35384500, + "wall_ns": 62855542, + "cpu_ns": 58368000, + "rss_bytes": 23674880 + }, + { + "ns": 35299666, + "wall_ns": 58593500, + "cpu_ns": 56208000, + "rss_bytes": 23904256 + } + ], + "ns": 35384500, + "wall_ns": 62855542, + "cpu_ns": 58368000, + "rss_bytes": 23756800 + }, + "comparisons": { + "jit": { + "ns": 0.9464946999950427, + "wall_ns": 0.9464581394448784, + "cpu_ns": 0.9458950252939673, + "rss_bytes": 0.9990224828934506 + }, + "interp": { + "ns": 0.992816634949326, + "wall_ns": 0.9940879894579046, + "cpu_ns": 0.9935618148760081, + "rss_bytes": 1.000341997264022 + } + } + }, + "datetime_ops": { + "work": 60000, + "base": { + "samples": [ + { + "ns": 10491272166, + "wall_ns": 10727276041, + "cpu_ns": 10495442000, + "rss_bytes": 34521088 + }, + { + "ns": 10834308917, + "wall_ns": 10882187667, + "cpu_ns": 10802558000, + "rss_bytes": 34455552 + }, + { + "ns": 10198156500, + "wall_ns": 10415578250, + "cpu_ns": 10235377000, + "rss_bytes": 34537472 + }, + { + "ns": 10051255959, + "wall_ns": 10100171750, + "cpu_ns": 10021421000, + "rss_bytes": 34488320 + }, + { + "ns": 9573202917, + "wall_ns": 9783415083, + "cpu_ns": 9563152000, + "rss_bytes": 34340864 + } + ], + "ns": 10198156500, + "wall_ns": 10415578250, + "cpu_ns": 10235377000, + "rss_bytes": 34488320 + }, + "new": { + "samples": [ + { + "ns": 10025215666, + "wall_ns": 10070821083, + "cpu_ns": 10056206000, + "rss_bytes": 34586624 + }, + { + "ns": 10849369209, + "wall_ns": 11083439041, + "cpu_ns": 10891841000, + "rss_bytes": 34455552 + }, + { + "ns": 10393952416, + "wall_ns": 10580501208, + "cpu_ns": 10381691000, + "rss_bytes": 34619392 + }, + { + "ns": 10519334583, + "wall_ns": 11206267708, + "cpu_ns": 10397238000, + "rss_bytes": 34471936 + }, + { + "ns": 10136109083, + "wall_ns": 10331633625, + "cpu_ns": 10181829000, + "rss_bytes": 34684928 + } + ], + "ns": 10393952416, + "wall_ns": 10580501208, + "cpu_ns": 10381691000, + "rss_bytes": 34586624 + }, + "base_interp": { + "samples": [ + { + "ns": 10256309083, + "wall_ns": 10432906375, + "cpu_ns": 10287477000, + "rss_bytes": 31490048 + }, + { + "ns": 10827767042, + "wall_ns": 11018746542, + "cpu_ns": 10877132000, + "rss_bytes": 31522816 + }, + { + "ns": 10337085625, + "wall_ns": 10553299292, + "cpu_ns": 10324200000, + "rss_bytes": 31424512 + }, + { + "ns": 10707566667, + "wall_ns": 10925784291, + "cpu_ns": 10614738000, + "rss_bytes": 31342592 + }, + { + "ns": 10183030667, + "wall_ns": 10361535834, + "cpu_ns": 10223523000, + "rss_bytes": 31391744 + } + ], + "ns": 10337085625, + "wall_ns": 10553299292, + "cpu_ns": 10324200000, + "rss_bytes": 31424512 + }, + "new_interp": { + "samples": [ + { + "ns": 10211307041, + "wall_ns": 10250325125, + "cpu_ns": 10232623000, + "rss_bytes": 31588352 + }, + { + "ns": 10293888667, + "wall_ns": 10337364958, + "cpu_ns": 10326252000, + "rss_bytes": 31375360 + }, + { + "ns": 10463559792, + "wall_ns": 10511644041, + "cpu_ns": 10447013000, + "rss_bytes": 31358976 + }, + { + "ns": 10221851375, + "wall_ns": 10443875208, + "cpu_ns": 10268575000, + "rss_bytes": 31522816 + }, + { + "ns": 10190575458, + "wall_ns": 10235137583, + "cpu_ns": 10224506000, + "rss_bytes": 31686656 + } + ], + "ns": 10221851375, + "wall_ns": 10337364958, + "cpu_ns": 10268575000, + "rss_bytes": 31522816 + }, + "cpython": { + "samples": [ + { + "ns": 287993834, + "wall_ns": 310295167, + "cpu_ns": 305569000, + "rss_bytes": 15368192 + }, + { + "ns": 302943167, + "wall_ns": 340441667, + "cpu_ns": 326652000, + "rss_bytes": 15286272 + }, + { + "ns": 321721750, + "wall_ns": 346452250, + "cpu_ns": 338216000, + "rss_bytes": 15482880 + }, + { + "ns": 296140583, + "wall_ns": 333494750, + "cpu_ns": 321699000, + "rss_bytes": 15286272 + }, + { + "ns": 291006333, + "wall_ns": 316339792, + "cpu_ns": 312548000, + "rss_bytes": 15269888 + } + ], + "ns": 296140583, + "wall_ns": 333494750, + "cpu_ns": 321699000, + "rss_bytes": 15286272 + }, + "comparisons": { + "jit": { + "ns": 1.0191991480028768, + "wall_ns": 1.0184936503723687, + "cpu_ns": 1.0142949302209385, + "rss_bytes": 1.0018984337921215 + }, + "interp": { + "ns": 0.9956122576225211, + "wall_ns": 0.982499483515206, + "cpu_ns": 0.9946678860132567, + "rss_bytes": 1.0031217481789803 + } + } + }, + "pickle_bench": { + "work": 40, + "base": { + "samples": [ + { + "ns": 1691803416, + "wall_ns": 1736898666, + "cpu_ns": 1735410000, + "rss_bytes": 43040768 + }, + { + "ns": 1691582375, + "wall_ns": 1737511916, + "cpu_ns": 1735712000, + "rss_bytes": 43008000 + }, + { + "ns": 1710484125, + "wall_ns": 1756225666, + "cpu_ns": 1754489000, + "rss_bytes": 43139072 + }, + { + "ns": 1695977041, + "wall_ns": 1741857958, + "cpu_ns": 1740155000, + "rss_bytes": 43024384 + }, + { + "ns": 1685191917, + "wall_ns": 1731216833, + "cpu_ns": 1729503000, + "rss_bytes": 42893312 + } + ], + "ns": 1691803416, + "wall_ns": 1737511916, + "cpu_ns": 1735712000, + "rss_bytes": 43024384 + }, + "new": { + "samples": [ + { + "ns": 1684835334, + "wall_ns": 1730604166, + "cpu_ns": 1728897000, + "rss_bytes": 43073536 + }, + { + "ns": 1692901209, + "wall_ns": 1739400250, + "cpu_ns": 1737602000, + "rss_bytes": 43352064 + }, + { + "ns": 1692467375, + "wall_ns": 1738324709, + "cpu_ns": 1736602000, + "rss_bytes": 43270144 + }, + { + "ns": 1679871292, + "wall_ns": 1726017000, + "cpu_ns": 1724338000, + "rss_bytes": 42991616 + }, + { + "ns": 1682023625, + "wall_ns": 1727518167, + "cpu_ns": 1725850000, + "rss_bytes": 43139072 + } + ], + "ns": 1684835334, + "wall_ns": 1730604166, + "cpu_ns": 1728897000, + "rss_bytes": 43139072 + }, + "base_interp": { + "samples": [ + { + "ns": 1539741458, + "wall_ns": 1584033250, + "cpu_ns": 1582449000, + "rss_bytes": 39469056 + }, + { + "ns": 1557112375, + "wall_ns": 1601376458, + "cpu_ns": 1599576000, + "rss_bytes": 39682048 + }, + { + "ns": 1537071375, + "wall_ns": 1581658041, + "cpu_ns": 1579997000, + "rss_bytes": 39600128 + }, + { + "ns": 1543772542, + "wall_ns": 1588107583, + "cpu_ns": 1586448000, + "rss_bytes": 39829504 + }, + { + "ns": 1541534291, + "wall_ns": 1586159417, + "cpu_ns": 1584556000, + "rss_bytes": 39632896 + } + ], + "ns": 1541534291, + "wall_ns": 1586159417, + "cpu_ns": 1584556000, + "rss_bytes": 39632896 + }, + "new_interp": { + "samples": [ + { + "ns": 1533235166, + "wall_ns": 1576950541, + "cpu_ns": 1575406000, + "rss_bytes": 39829504 + }, + { + "ns": 1533061916, + "wall_ns": 1577710750, + "cpu_ns": 1575970000, + "rss_bytes": 39682048 + }, + { + "ns": 1545593542, + "wall_ns": 1589027709, + "cpu_ns": 1587398000, + "rss_bytes": 39632896 + }, + { + "ns": 1545659917, + "wall_ns": 1590114042, + "cpu_ns": 1588375000, + "rss_bytes": 39632896 + }, + { + "ns": 1530878250, + "wall_ns": 1575104084, + "cpu_ns": 1573559000, + "rss_bytes": 39682048 + } + ], + "ns": 1533235166, + "wall_ns": 1577710750, + "cpu_ns": 1575970000, + "rss_bytes": 39682048 + }, + "cpython": { + "samples": [ + { + "ns": 4858583, + "wall_ns": 23405542, + "cpu_ns": 21887000, + "rss_bytes": 16154624 + }, + { + "ns": 4806542, + "wall_ns": 24550000, + "cpu_ns": 22784000, + "rss_bytes": 16269312 + }, + { + "ns": 4821125, + "wall_ns": 23485917, + "cpu_ns": 21870000, + "rss_bytes": 16138240 + }, + { + "ns": 4926625, + "wall_ns": 24738292, + "cpu_ns": 23005000, + "rss_bytes": 16187392 + }, + { + "ns": 4782833, + "wall_ns": 24052292, + "cpu_ns": 22392000, + "rss_bytes": 16187392 + } + ], + "ns": 4821125, + "wall_ns": 24052292, + "cpu_ns": 22392000, + "rss_bytes": 16187392 + }, + "comparisons": { + "jit": { + "ns": 0.9958812696947528, + "wall_ns": 0.9963760119555529, + "cpu_ns": 0.996246996387021, + "rss_bytes": 1.0030383592859855 + }, + "interp": { + "ns": 0.9957744256568559, + "wall_ns": 0.9955286866610913, + "cpu_ns": 0.995549303642645, + "rss_bytes": 1.0008274720728176 + } + } + }, + "startup": { + "work": 1, + "base": { + "samples": [ + { + "ns": 25233625, + "wall_ns": 25233625, + "cpu_ns": 23735000, + "rss_bytes": 31309824 + }, + { + "ns": 24762209, + "wall_ns": 24762209, + "cpu_ns": 23385000, + "rss_bytes": 31211520 + }, + { + "ns": 25424000, + "wall_ns": 25424000, + "cpu_ns": 23915000, + "rss_bytes": 31326208 + }, + { + "ns": 25009583, + "wall_ns": 25009583, + "cpu_ns": 23605000, + "rss_bytes": 31391744 + }, + { + "ns": 24909583, + "wall_ns": 24909583, + "cpu_ns": 23486000, + "rss_bytes": 31293440 + } + ], + "ns": 25009583, + "wall_ns": 25009583, + "cpu_ns": 23605000, + "rss_bytes": 31309824 + }, + "new": { + "samples": [ + { + "ns": 24962250, + "wall_ns": 24962250, + "cpu_ns": 23518000, + "rss_bytes": 31244288 + }, + { + "ns": 25079958, + "wall_ns": 25079958, + "cpu_ns": 23732000, + "rss_bytes": 31326208 + }, + { + "ns": 24977875, + "wall_ns": 24977875, + "cpu_ns": 23551000, + "rss_bytes": 31358976 + }, + { + "ns": 25019875, + "wall_ns": 25019875, + "cpu_ns": 23575000, + "rss_bytes": 31309824 + }, + { + "ns": 24920291, + "wall_ns": 24920291, + "cpu_ns": 23473000, + "rss_bytes": 31358976 + } + ], + "ns": 24977875, + "wall_ns": 24977875, + "cpu_ns": 23551000, + "rss_bytes": 31326208 + }, + "base_interp": { + "samples": [ + { + "ns": 24615208, + "wall_ns": 24615208, + "cpu_ns": 23187000, + "rss_bytes": 29409280 + }, + { + "ns": 24430958, + "wall_ns": 24430958, + "cpu_ns": 23010000, + "rss_bytes": 29294592 + }, + { + "ns": 24340625, + "wall_ns": 24340625, + "cpu_ns": 22899000, + "rss_bytes": 29425664 + }, + { + "ns": 24688083, + "wall_ns": 24688083, + "cpu_ns": 23271000, + "rss_bytes": 29245440 + }, + { + "ns": 24588166, + "wall_ns": 24588166, + "cpu_ns": 23174000, + "rss_bytes": 29278208 + } + ], + "ns": 24588166, + "wall_ns": 24588166, + "cpu_ns": 23174000, + "rss_bytes": 29294592 + }, + "new_interp": { + "samples": [ + { + "ns": 24232542, + "wall_ns": 24232542, + "cpu_ns": 22838000, + "rss_bytes": 29376512 + }, + { + "ns": 24444542, + "wall_ns": 24444542, + "cpu_ns": 23039000, + "rss_bytes": 29261824 + }, + { + "ns": 24686667, + "wall_ns": 24686667, + "cpu_ns": 23225000, + "rss_bytes": 29097984 + }, + { + "ns": 24384792, + "wall_ns": 24384792, + "cpu_ns": 22950000, + "rss_bytes": 29196288 + }, + { + "ns": 23967875, + "wall_ns": 23967875, + "cpu_ns": 22599000, + "rss_bytes": 29147136 + } + ], + "ns": 24384792, + "wall_ns": 24384792, + "cpu_ns": 22950000, + "rss_bytes": 29196288 + }, + "cpython": { + "samples": [ + { + "ns": 17109792, + "wall_ns": 17109792, + "cpu_ns": 15418000, + "rss_bytes": 15171584 + }, + { + "ns": 18229208, + "wall_ns": 18229208, + "cpu_ns": 16426000, + "rss_bytes": 15106048 + }, + { + "ns": 18075417, + "wall_ns": 18075417, + "cpu_ns": 16356000, + "rss_bytes": 15073280 + }, + { + "ns": 17269958, + "wall_ns": 17269958, + "cpu_ns": 15640000, + "rss_bytes": 15089664 + }, + { + "ns": 16801834, + "wall_ns": 16801834, + "cpu_ns": 15222000, + "rss_bytes": 15155200 + } + ], + "ns": 17269958, + "wall_ns": 17269958, + "cpu_ns": 15640000, + "rss_bytes": 15106048 + }, + "comparisons": { + "jit": { + "ns": 1.0004115222552892, + "wall_ns": 1.0004115222552892, + "cpu_ns": 0.9987290828214361, + "rss_bytes": 1.0010460251046025 + }, + "interp": { + "ns": 0.9877150850473081, + "wall_ns": 0.9877150850473081, + "cpu_ns": 0.9862060074771174, + "rss_bytes": 0.9983193277310924 + } + } + } + } +} diff --git a/crates/weavepy-bench/census/2026-09-execution/validation.json b/crates/weavepy-bench/census/2026-09-execution/validation.json new file mode 100644 index 00000000..210d7047 --- /dev/null +++ b/crates/weavepy-bench/census/2026-09-execution/validation.json @@ -0,0 +1,169 @@ +{ + "vm_unit_tests": 260, + "compiler_unit_tests": 25, + "benchmark_reporting_tests": 4, + "integration_harnesses": [ + "all_run_fixtures_match", + "bundled_stdlib_verbatim_set_has_not_drifted" + ], + "integration_subprocess_executable": "target/release/weavepy-perf-971d752", + "checks": [ + "cargo fmt --all --check", + "cargo clippy -p weavepy-vm -p weavepy-compiler --all-targets --all-features -- -D warnings", + "cargo check -p weavepy-vm --no-default-features" + ], + "new_regressions": [ + "test_string_fastpaths.py", + "test_indexed_compilation.py" + ], + "new_regression_modes": [ + "CPython 3.14.7", + "WeavePy JIT", + "WeavePy interpreter", + "WeavePy gil=0" + ], + "free_threading_regressions": { + "test_rfc0076_gil0.py": "13 tests passed", + "test_cross_thread_heap.py": "pass under gil=0" + }, + "release_cpython_suites": [ + { + "suite": "test_str", + "exit_code": 0, + "status": "pass", + "expected": "pass", + "unexpected": 0, + "duration_ms": 18451, + "reported_tests": 139 + }, + { + "suite": "test_string", + "exit_code": 0, + "status": "pass", + "expected": "pass", + "unexpected": 0, + "duration_ms": 1085, + "reported_tests": 55 + }, + { + "suite": "test_compile", + "exit_code": 0, + "status": "pass", + "expected": "pass", + "unexpected": 0, + "duration_ms": 4424, + "reported_tests": 185 + }, + { + "suite": "test_code", + "exit_code": 0, + "status": "pass", + "expected": "pass", + "unexpected": 0, + "duration_ms": 698, + "reported_tests": 37 + }, + { + "suite": "test_dis", + "exit_code": 0, + "status": "pass", + "expected": "pass", + "unexpected": 0, + "duration_ms": 2062, + "reported_tests": 145 + }, + { + "suite": "test_peepholer", + "exit_code": 0, + "status": "pass", + "expected": "pass", + "unexpected": 0, + "duration_ms": 1617, + "reported_tests": 130 + }, + { + "suite": "test_marshal", + "exit_code": 0, + "status": "divergence", + "expected": "divergence", + "unexpected": 0, + "duration_ms": 1086, + "reported_tests": null + }, + { + "suite": "test_builtin", + "exit_code": 0, + "status": "pass", + "expected": "pass", + "unexpected": 0, + "duration_ms": 1245, + "reported_tests": 147 + }, + { + "suite": "test_list", + "exit_code": 0, + "status": "pass", + "expected": "pass", + "unexpected": 0, + "duration_ms": 2417, + "reported_tests": 68 + }, + { + "suite": "test_dict", + "exit_code": 0, + "status": "pass", + "expected": "pass", + "unexpected": 0, + "duration_ms": 2020, + "reported_tests": 121 + }, + { + "suite": "test_gc", + "exit_code": 0, + "status": "pass", + "expected": "pass", + "unexpected": 0, + "duration_ms": 5407, + "reported_tests": 57 + }, + { + "suite": "test_threading", + "exit_code": 0, + "status": "pass", + "expected": "pass", + "unexpected": 0, + "duration_ms": 135574, + "reported_tests": 228 + }, + { + "suite": "test_threading_local", + "exit_code": 0, + "status": "pass", + "expected": "pass", + "unexpected": 0, + "duration_ms": 5968, + "reported_tests": 22 + } + ], + "marshal_baseline": { + "reports": [ + { + "detail": "...........E...........E..ssssss.....s............F.F...........sssssss....\n======================================================================\nERROR: test_loads_abnormal_reference_loops (test.test_marshal.BugsTestCase.test_loads_abnormal_reference_loops)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/Users/owencarey/Documents/weavefoundry/weavepy/vendor/cpython314/Lib/test/test_marshal.py\", line 398, in test_loads_abnormal_reference_loops\n a = marshal.loads(data)\nValueError: bad marshal data (invalid reference)\n\n======================================================================\nERROR: test_reference_loop_tuple (test.test_marshal.BugsTestCase.test_reference_loop_tuple)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"/Users/owencarey/Documents/weavefoundry/weavepy/vendor/cpython314/Lib/test/test_marshal.py\", line 349, in test_reference_loop_tuple\n b = marshal.loads(\u2026[truncated]", + "duration_ms": 1508, + "expected": "divergence", + "label": "cpython/Lib/test/test_marshal.py", + "status": "divergence" + } + ], + "summary": { + "divergence": 1, + "error": 0, + "fail": 0, + "pass": 0, + "skip": 0, + "timeout": 0, + "total": 1, + "unexpected": 0 + } + } +} diff --git a/crates/weavepy-bench/census/2026-09-execution/warm.json b/crates/weavepy-bench/census/2026-09-execution/warm.json new file mode 100644 index 00000000..82ebdd51 --- /dev/null +++ b/crates/weavepy-bench/census/2026-09-execution/warm.json @@ -0,0 +1,1871 @@ +{ + "samples": 7, + "warm": true, + "platform": "darwin-arm64", + "binaries": { + "base": { + "path": "target/release/weavepy-perf-971d752", + "bytes": 44120992 + }, + "new": { + "path": "target/release/weavepy", + "bytes": 44121520 + } + }, + "rows": { + "deltablue": { + "work": 50, + "base": { + "samples": [ + { + "ns": 1082778541, + "wall_ns": 2210265375, + "cpu_ns": 2207216000, + "rss_bytes": 39256064, + "work_cpu_ns": 1082359000 + }, + { + "ns": 1077031375, + "wall_ns": 2190393125, + "cpu_ns": 2188031000, + "rss_bytes": 39223296, + "work_cpu_ns": 1076765000 + }, + { + "ns": 1109585125, + "wall_ns": 2277522292, + "cpu_ns": 2274905000, + "rss_bytes": 38944768, + "work_cpu_ns": 1109188000 + }, + { + "ns": 1105120333, + "wall_ns": 2289667542, + "cpu_ns": 2286826000, + "rss_bytes": 39206912, + "work_cpu_ns": 1104553000 + }, + { + "ns": 1121992250, + "wall_ns": 2287490250, + "cpu_ns": 2284044000, + "rss_bytes": 39059456, + "work_cpu_ns": 1121157000 + }, + { + "ns": 1149969750, + "wall_ns": 2355263625, + "cpu_ns": 2352061000, + "rss_bytes": 39305216, + "work_cpu_ns": 1149925000 + }, + { + "ns": 1296667292, + "wall_ns": 2458481125, + "cpu_ns": 2455729000, + "rss_bytes": 38928384, + "work_cpu_ns": 1296095000 + } + ], + "ns": 1109585125, + "wall_ns": 2287490250, + "cpu_ns": 2284044000, + "rss_bytes": 39206912, + "work_cpu_ns": 1109188000 + }, + "new": { + "samples": [ + { + "ns": 1066260958, + "wall_ns": 2173811083, + "cpu_ns": 2170968000, + "rss_bytes": 39305216, + "work_cpu_ns": 1065729000 + }, + { + "ns": 1085261541, + "wall_ns": 2224171334, + "cpu_ns": 2221347000, + "rss_bytes": 39043072, + "work_cpu_ns": 1084632000 + }, + { + "ns": 1099557125, + "wall_ns": 2255903167, + "cpu_ns": 2252477000, + "rss_bytes": 39059456, + "work_cpu_ns": 1099124000 + }, + { + "ns": 1106217625, + "wall_ns": 2264094792, + "cpu_ns": 2261404000, + "rss_bytes": 39190528, + "work_cpu_ns": 1105776000 + }, + { + "ns": 1148093750, + "wall_ns": 2342252500, + "cpu_ns": 2339481000, + "rss_bytes": 39141376, + "work_cpu_ns": 1147721000 + }, + { + "ns": 1114466083, + "wall_ns": 2300235416, + "cpu_ns": 2297433000, + "rss_bytes": 39223296, + "work_cpu_ns": 1114111000 + }, + { + "ns": 1072363125, + "wall_ns": 2258430625, + "cpu_ns": 2255638000, + "rss_bytes": 39141376, + "work_cpu_ns": 1072161000 + } + ], + "ns": 1099557125, + "wall_ns": 2258430625, + "cpu_ns": 2255638000, + "rss_bytes": 39141376, + "work_cpu_ns": 1099124000 + }, + "base_interp": { + "samples": [ + { + "ns": 814891917, + "wall_ns": 1649829500, + "cpu_ns": 1647456000, + "rss_bytes": 34668544, + "work_cpu_ns": 814669000 + }, + { + "ns": 843564542, + "wall_ns": 1709805541, + "cpu_ns": 1707193000, + "rss_bytes": 34684928, + "work_cpu_ns": 843294000 + }, + { + "ns": 847342917, + "wall_ns": 1718795542, + "cpu_ns": 1715751000, + "rss_bytes": 34603008, + "work_cpu_ns": 846841000 + }, + { + "ns": 846382875, + "wall_ns": 1737219709, + "cpu_ns": 1735154000, + "rss_bytes": 34701312, + "work_cpu_ns": 846185000 + }, + { + "ns": 849415541, + "wall_ns": 1736584208, + "cpu_ns": 1733704000, + "rss_bytes": 34652160, + "work_cpu_ns": 849340000 + }, + { + "ns": 871930250, + "wall_ns": 1763708125, + "cpu_ns": 1760413000, + "rss_bytes": 34684928, + "work_cpu_ns": 871072000 + }, + { + "ns": 928989084, + "wall_ns": 1828798667, + "cpu_ns": 1825906000, + "rss_bytes": 34717696, + "work_cpu_ns": 928645000 + } + ], + "ns": 847342917, + "wall_ns": 1736584208, + "cpu_ns": 1733704000, + "rss_bytes": 34684928, + "work_cpu_ns": 846841000 + }, + "new_interp": { + "samples": [ + { + "ns": 794715000, + "wall_ns": 1616871417, + "cpu_ns": 1614477000, + "rss_bytes": 34684928, + "work_cpu_ns": 794432000 + }, + { + "ns": 834713667, + "wall_ns": 1693177959, + "cpu_ns": 1690753000, + "rss_bytes": 34717696, + "work_cpu_ns": 834441000 + }, + { + "ns": 829825875, + "wall_ns": 1699297000, + "cpu_ns": 1697080000, + "rss_bytes": 34652160, + "work_cpu_ns": 829746000 + }, + { + "ns": 851452458, + "wall_ns": 1748744084, + "cpu_ns": 1746494000, + "rss_bytes": 34635776, + "work_cpu_ns": 851059000 + }, + { + "ns": 853569958, + "wall_ns": 1734855208, + "cpu_ns": 1731903000, + "rss_bytes": 34619392, + "work_cpu_ns": 853071000 + }, + { + "ns": 873941125, + "wall_ns": 1781672334, + "cpu_ns": 1779289000, + "rss_bytes": 34783232, + "work_cpu_ns": 873781000 + }, + { + "ns": 863776791, + "wall_ns": 1773430208, + "cpu_ns": 1770536000, + "rss_bytes": 34734080, + "work_cpu_ns": 863631000 + } + ], + "ns": 851452458, + "wall_ns": 1734855208, + "cpu_ns": 1731903000, + "rss_bytes": 34684928, + "work_cpu_ns": 851059000 + }, + "cpython": { + "samples": [ + { + "ns": 51481541, + "wall_ns": 127099750, + "cpu_ns": 125017000, + "rss_bytes": 17580032, + "work_cpu_ns": 51473000 + }, + { + "ns": 54183625, + "wall_ns": 133470166, + "cpu_ns": 131240000, + "rss_bytes": 17678336, + "work_cpu_ns": 54179000 + }, + { + "ns": 55572500, + "wall_ns": 134045875, + "cpu_ns": 131864000, + "rss_bytes": 17580032, + "work_cpu_ns": 55568000 + }, + { + "ns": 54201625, + "wall_ns": 133390958, + "cpu_ns": 130873000, + "rss_bytes": 17596416, + "work_cpu_ns": 54189000 + }, + { + "ns": 56026916, + "wall_ns": 136494541, + "cpu_ns": 134252000, + "rss_bytes": 17563648, + "work_cpu_ns": 55980000 + }, + { + "ns": 57429250, + "wall_ns": 139412417, + "cpu_ns": 137190000, + "rss_bytes": 17678336, + "work_cpu_ns": 57425000 + }, + { + "ns": 54705875, + "wall_ns": 134152375, + "cpu_ns": 131528000, + "rss_bytes": 17645568, + "work_cpu_ns": 54701000 + } + ], + "ns": 54705875, + "wall_ns": 134045875, + "cpu_ns": 131528000, + "rss_bytes": 17596416, + "work_cpu_ns": 54701000 + }, + "comparisons": { + "jit": { + "ns": 0.9909623878564522, + "wall_ns": 0.9888312388017422, + "cpu_ns": 0.988883281893769, + "rss_bytes": 1.0012520868113524, + "work_cpu_ns": 0.9909266959253076 + }, + "interp": { + "ns": 0.989507767859688, + "wall_ns": 0.9902751619401846, + "cpu_ns": 0.9903701573284333, + "rss_bytes": 1.0004725897920606, + "work_cpu_ns": 0.9895018819059546 + } + } + }, + "call_overhead": { + "work": 150000, + "base": { + "samples": [ + { + "ns": 563430834, + "wall_ns": 1182468042, + "cpu_ns": 1179366000, + "rss_bytes": 32227328, + "work_cpu_ns": 563070000 + }, + { + "ns": 497932000, + "wall_ns": 1030776291, + "cpu_ns": 1028059000, + "rss_bytes": 32243712, + "work_cpu_ns": 497532000 + }, + { + "ns": 491907667, + "wall_ns": 1162942417, + "cpu_ns": 1157785000, + "rss_bytes": 32243712, + "work_cpu_ns": 491884000 + }, + { + "ns": 380189916, + "wall_ns": 820985209, + "cpu_ns": 818863000, + "rss_bytes": 32096256, + "work_cpu_ns": 380186000 + }, + { + "ns": 376532250, + "wall_ns": 782356125, + "cpu_ns": 780348000, + "rss_bytes": 32210944, + "work_cpu_ns": 376522000 + }, + { + "ns": 380763583, + "wall_ns": 791016750, + "cpu_ns": 788858000, + "rss_bytes": 32292864, + "work_cpu_ns": 380761000 + }, + { + "ns": 384087833, + "wall_ns": 794996375, + "cpu_ns": 792512000, + "rss_bytes": 32161792, + "work_cpu_ns": 383989000 + } + ], + "ns": 384087833, + "wall_ns": 820985209, + "cpu_ns": 818863000, + "rss_bytes": 32227328, + "work_cpu_ns": 383989000 + }, + "new": { + "samples": [ + { + "ns": 565551375, + "wall_ns": 1187976500, + "cpu_ns": 1184609000, + "rss_bytes": 32145408, + "work_cpu_ns": 565330000 + }, + { + "ns": 490436792, + "wall_ns": 1028980209, + "cpu_ns": 1026540000, + "rss_bytes": 31997952, + "work_cpu_ns": 490379000 + }, + { + "ns": 610524958, + "wall_ns": 1296629125, + "cpu_ns": 1291985000, + "rss_bytes": 32096256, + "work_cpu_ns": 609721000 + }, + { + "ns": 361252834, + "wall_ns": 761301583, + "cpu_ns": 759422000, + "rss_bytes": 32014336, + "work_cpu_ns": 361207000 + }, + { + "ns": 377860208, + "wall_ns": 788434125, + "cpu_ns": 786257000, + "rss_bytes": 32063488, + "work_cpu_ns": 377853000 + }, + { + "ns": 379369709, + "wall_ns": 793307083, + "cpu_ns": 791292000, + "rss_bytes": 31997952, + "work_cpu_ns": 379354000 + }, + { + "ns": 381618000, + "wall_ns": 792658584, + "cpu_ns": 790417000, + "rss_bytes": 31817728, + "work_cpu_ns": 381615000 + } + ], + "ns": 381618000, + "wall_ns": 793307083, + "cpu_ns": 791292000, + "rss_bytes": 32014336, + "work_cpu_ns": 381615000 + }, + "base_interp": { + "samples": [ + { + "ns": 677689209, + "wall_ns": 1379927958, + "cpu_ns": 1377459000, + "rss_bytes": 29835264, + "work_cpu_ns": 677614000 + }, + { + "ns": 619366958, + "wall_ns": 1264470834, + "cpu_ns": 1261456000, + "rss_bytes": 29917184, + "work_cpu_ns": 619127000 + }, + { + "ns": 723184125, + "wall_ns": 1426806875, + "cpu_ns": 1423494000, + "rss_bytes": 30015488, + "work_cpu_ns": 722789000 + }, + { + "ns": 452269958, + "wall_ns": 920625583, + "cpu_ns": 918670000, + "rss_bytes": 29884416, + "work_cpu_ns": 452228000 + }, + { + "ns": 469269000, + "wall_ns": 977371417, + "cpu_ns": 964053000, + "rss_bytes": 30015488, + "work_cpu_ns": 469257000 + }, + { + "ns": 472750667, + "wall_ns": 970198500, + "cpu_ns": 968270000, + "rss_bytes": 29884416, + "work_cpu_ns": 472733000 + }, + { + "ns": 470763791, + "wall_ns": 971936917, + "cpu_ns": 969647000, + "rss_bytes": 29933568, + "work_cpu_ns": 470757000 + } + ], + "ns": 472750667, + "wall_ns": 977371417, + "cpu_ns": 969647000, + "rss_bytes": 29917184, + "work_cpu_ns": 472733000 + }, + "new_interp": { + "samples": [ + { + "ns": 596496000, + "wall_ns": 1207512000, + "cpu_ns": 1205185000, + "rss_bytes": 29802496, + "work_cpu_ns": 596287000 + }, + { + "ns": 589668333, + "wall_ns": 1251360166, + "cpu_ns": 1248730000, + "rss_bytes": 29933568, + "work_cpu_ns": 589552000 + }, + { + "ns": 635851250, + "wall_ns": 1231059041, + "cpu_ns": 1228252000, + "rss_bytes": 29818880, + "work_cpu_ns": 635437000 + }, + { + "ns": 488084042, + "wall_ns": 988340417, + "cpu_ns": 986113000, + "rss_bytes": 29753344, + "work_cpu_ns": 488058000 + }, + { + "ns": 469885292, + "wall_ns": 980529583, + "cpu_ns": 978555000, + "rss_bytes": 29868032, + "work_cpu_ns": 469882000 + }, + { + "ns": 474666750, + "wall_ns": 980855625, + "cpu_ns": 978874000, + "rss_bytes": 29802496, + "work_cpu_ns": 474637000 + }, + { + "ns": 472287959, + "wall_ns": 975510541, + "cpu_ns": 973702000, + "rss_bytes": 29786112, + "work_cpu_ns": 472281000 + } + ], + "ns": 488084042, + "wall_ns": 988340417, + "cpu_ns": 986113000, + "rss_bytes": 29802496, + "work_cpu_ns": 488058000 + }, + "cpython": { + "samples": [ + { + "ns": 57195750, + "wall_ns": 138765208, + "cpu_ns": 136256000, + "rss_bytes": 15695872, + "work_cpu_ns": 57164000 + }, + { + "ns": 55464834, + "wall_ns": 135590375, + "cpu_ns": 132844000, + "rss_bytes": 15695872, + "work_cpu_ns": 55461000 + }, + { + "ns": 52802041, + "wall_ns": 130156083, + "cpu_ns": 127670000, + "rss_bytes": 15745024, + "work_cpu_ns": 52797000 + }, + { + "ns": 48629458, + "wall_ns": 117399334, + "cpu_ns": 115252000, + "rss_bytes": 15679488, + "work_cpu_ns": 48627000 + }, + { + "ns": 50502875, + "wall_ns": 120425834, + "cpu_ns": 118529000, + "rss_bytes": 15679488, + "work_cpu_ns": 50501000 + }, + { + "ns": 48233541, + "wall_ns": 115220708, + "cpu_ns": 113157000, + "rss_bytes": 15728640, + "work_cpu_ns": 48232000 + }, + { + "ns": 46177333, + "wall_ns": 112399833, + "cpu_ns": 110394000, + "rss_bytes": 15745024, + "work_cpu_ns": 46176000 + } + ], + "ns": 50502875, + "wall_ns": 120425834, + "cpu_ns": 118529000, + "rss_bytes": 15695872, + "work_cpu_ns": 50501000 + }, + "comparisons": { + "jit": { + "ns": 0.9963392665101589, + "wall_ns": 1.002895429205513, + "cpu_ns": 1.0030854729241512, + "rss_bytes": 0.9954221770091557, + "work_cpu_ns": 0.9963047686081296 + }, + "interp": { + "ns": 1.0013133021784946, + "wall_ns": 1.003231285410099, + "cpu_ns": 1.0041819342502993, + "rss_bytes": 0.9956140350877193, + "work_cpu_ns": 1.001331892758126 + } + } + }, + "float_math": { + "work": 100000, + "base": { + "samples": [ + { + "ns": 724854500, + "wall_ns": 1351848500, + "cpu_ns": 1348205000, + "rss_bytes": 131186688, + "work_cpu_ns": 724831000 + }, + { + "ns": 820867208, + "wall_ns": 1492490708, + "cpu_ns": 1488516000, + "rss_bytes": 131104768, + "work_cpu_ns": 820614000 + }, + { + "ns": 600577333, + "wall_ns": 1129911417, + "cpu_ns": 1126489000, + "rss_bytes": 131219456, + "work_cpu_ns": 600499000 + }, + { + "ns": 592339542, + "wall_ns": 1119350333, + "cpu_ns": 1115855000, + "rss_bytes": 131399680, + "work_cpu_ns": 592176000 + }, + { + "ns": 1151689917, + "wall_ns": 2155188875, + "cpu_ns": 2123716000, + "rss_bytes": 134266880, + "work_cpu_ns": 1136333000 + }, + { + "ns": 942829958, + "wall_ns": 1938822000, + "cpu_ns": 1917273000, + "rss_bytes": 131973120, + "work_cpu_ns": 936755000 + }, + { + "ns": 881940083, + "wall_ns": 1617893958, + "cpu_ns": 1594585000, + "rss_bytes": 131104768, + "work_cpu_ns": 875620000 + } + ], + "ns": 820867208, + "wall_ns": 1492490708, + "cpu_ns": 1488516000, + "rss_bytes": 131219456, + "work_cpu_ns": 820614000 + }, + "new": { + "samples": [ + { + "ns": 638378708, + "wall_ns": 1168290417, + "cpu_ns": 1164932000, + "rss_bytes": 131268608, + "work_cpu_ns": 638239000 + }, + { + "ns": 789575333, + "wall_ns": 1467960709, + "cpu_ns": 1465562000, + "rss_bytes": 131350528, + "work_cpu_ns": 789402000 + }, + { + "ns": 612523791, + "wall_ns": 1158695625, + "cpu_ns": 1154997000, + "rss_bytes": 131334144, + "work_cpu_ns": 612357000 + }, + { + "ns": 597975250, + "wall_ns": 1119883166, + "cpu_ns": 1116604000, + "rss_bytes": 131350528, + "work_cpu_ns": 597949000 + }, + { + "ns": 1111376916, + "wall_ns": 2095339250, + "cpu_ns": 2068592000, + "rss_bytes": 132874240, + "work_cpu_ns": 1101188000 + }, + { + "ns": 948923375, + "wall_ns": 1652070542, + "cpu_ns": 1628083000, + "rss_bytes": 131334144, + "work_cpu_ns": 935603000 + }, + { + "ns": 824104417, + "wall_ns": 1583955666, + "cpu_ns": 1576849000, + "rss_bytes": 131432448, + "work_cpu_ns": 823470000 + } + ], + "ns": 789575333, + "wall_ns": 1467960709, + "cpu_ns": 1465562000, + "rss_bytes": 131350528, + "work_cpu_ns": 789402000 + }, + "base_interp": { + "samples": [ + { + "ns": 675819583, + "wall_ns": 1478180834, + "cpu_ns": 1474771000, + "rss_bytes": 123092992, + "work_cpu_ns": 675708000 + }, + { + "ns": 701806250, + "wall_ns": 1514704500, + "cpu_ns": 1510962000, + "rss_bytes": 122912768, + "work_cpu_ns": 701674000 + }, + { + "ns": 666985375, + "wall_ns": 1388088833, + "cpu_ns": 1384880000, + "rss_bytes": 123060224, + "work_cpu_ns": 666936000 + }, + { + "ns": 655221042, + "wall_ns": 1347859917, + "cpu_ns": 1344416000, + "rss_bytes": 122994688, + "work_cpu_ns": 654774000 + }, + { + "ns": 1273055000, + "wall_ns": 2641901292, + "cpu_ns": 2580513000, + "rss_bytes": 124059648, + "work_cpu_ns": 1232589000 + }, + { + "ns": 994094334, + "wall_ns": 2175213209, + "cpu_ns": 2160115000, + "rss_bytes": 122568704, + "work_cpu_ns": 992093000 + }, + { + "ns": 961195958, + "wall_ns": 1981415666, + "cpu_ns": 1970088000, + "rss_bytes": 123240448, + "work_cpu_ns": 958210000 + } + ], + "ns": 701806250, + "wall_ns": 1514704500, + "cpu_ns": 1510962000, + "rss_bytes": 123060224, + "work_cpu_ns": 701674000 + }, + "new_interp": { + "samples": [ + { + "ns": 752339750, + "wall_ns": 1506343125, + "cpu_ns": 1502886000, + "rss_bytes": 123076608, + "work_cpu_ns": 752127000 + }, + { + "ns": 658044417, + "wall_ns": 1397029333, + "cpu_ns": 1393467000, + "rss_bytes": 123076608, + "work_cpu_ns": 657888000 + }, + { + "ns": 649994209, + "wall_ns": 1352903917, + "cpu_ns": 1349763000, + "rss_bytes": 122896384, + "work_cpu_ns": 649916000 + }, + { + "ns": 809590500, + "wall_ns": 1541818125, + "cpu_ns": 1535696000, + "rss_bytes": 123011072, + "work_cpu_ns": 807425000 + }, + { + "ns": 1267883542, + "wall_ns": 2497130292, + "cpu_ns": 2472200000, + "rss_bytes": 122716160, + "work_cpu_ns": 1255503000 + }, + { + "ns": 1057682875, + "wall_ns": 2147379916, + "cpu_ns": 2138432000, + "rss_bytes": 122896384, + "work_cpu_ns": 1054652000 + }, + { + "ns": 929085375, + "wall_ns": 1932975917, + "cpu_ns": 1924349000, + "rss_bytes": 123043840, + "work_cpu_ns": 926173000 + } + ], + "ns": 809590500, + "wall_ns": 1541818125, + "cpu_ns": 1535696000, + "rss_bytes": 123011072, + "work_cpu_ns": 807425000 + }, + "cpython": { + "samples": [ + { + "ns": 61190167, + "wall_ns": 154622375, + "cpu_ns": 151810000, + "rss_bytes": 36601856, + "work_cpu_ns": 61175000 + }, + { + "ns": 57830375, + "wall_ns": 146403041, + "cpu_ns": 143634000, + "rss_bytes": 36618240, + "work_cpu_ns": 57822000 + }, + { + "ns": 58908958, + "wall_ns": 147351375, + "cpu_ns": 144623000, + "rss_bytes": 36651008, + "work_cpu_ns": 58901000 + }, + { + "ns": 94608250, + "wall_ns": 236103000, + "cpu_ns": 231525000, + "rss_bytes": 36569088, + "work_cpu_ns": 94308000 + }, + { + "ns": 91679750, + "wall_ns": 232857041, + "cpu_ns": 227863000, + "rss_bytes": 36667392, + "work_cpu_ns": 91436000 + }, + { + "ns": 85340458, + "wall_ns": 226563750, + "cpu_ns": 222313000, + "rss_bytes": 36765696, + "work_cpu_ns": 85200000 + }, + { + "ns": 83209375, + "wall_ns": 208133250, + "cpu_ns": 204215000, + "rss_bytes": 36569088, + "work_cpu_ns": 83178000 + } + ], + "ns": 83209375, + "wall_ns": 208133250, + "cpu_ns": 204215000, + "rss_bytes": 36618240, + "work_cpu_ns": 83178000 + }, + "comparisons": { + "jit": { + "ns": 0.9649966536956318, + "wall_ns": 0.9790231666097859, + "cpu_ns": 0.9845792722416151, + "rss_bytes": 1.0006244536030973, + "work_cpu_ns": 0.9690715661694239 + }, + "interp": { + "ns": 0.9959377575988468, + "wall_ns": 0.9755529595171779, + "cpu_ns": 0.9767832705950191, + "rss_bytes": 0.9998668973778784, + "work_cpu_ns": 1.0185901383186122 + } + } + }, + "nbody": { + "work": 20000, + "base": { + "samples": [ + { + "ns": 373921709, + "wall_ns": 838395583, + "cpu_ns": 835335000, + "rss_bytes": 32522240, + "work_cpu_ns": 373617000 + }, + { + "ns": 312495375, + "wall_ns": 695857000, + "cpu_ns": 693203000, + "rss_bytes": 32325632, + "work_cpu_ns": 312357000 + }, + { + "ns": 218319250, + "wall_ns": 462041583, + "cpu_ns": 459756000, + "rss_bytes": 32440320, + "work_cpu_ns": 218317000 + }, + { + "ns": 217084875, + "wall_ns": 461890625, + "cpu_ns": 459875000, + "rss_bytes": 32440320, + "work_cpu_ns": 217075000 + }, + { + "ns": 232175792, + "wall_ns": 500170666, + "cpu_ns": 498310000, + "rss_bytes": 32505856, + "work_cpu_ns": 232164000 + }, + { + "ns": 229111750, + "wall_ns": 485711458, + "cpu_ns": 483652000, + "rss_bytes": 32325632, + "work_cpu_ns": 229109000 + }, + { + "ns": 218829958, + "wall_ns": 463144500, + "cpu_ns": 460773000, + "rss_bytes": 32538624, + "work_cpu_ns": 218827000 + } + ], + "ns": 229111750, + "wall_ns": 485711458, + "cpu_ns": 483652000, + "rss_bytes": 32440320, + "work_cpu_ns": 229109000 + }, + "new": { + "samples": [ + { + "ns": 412603083, + "wall_ns": 814025917, + "cpu_ns": 811266000, + "rss_bytes": 32391168, + "work_cpu_ns": 412500000 + }, + { + "ns": 332441083, + "wall_ns": 707585166, + "cpu_ns": 705066000, + "rss_bytes": 32210944, + "work_cpu_ns": 332311000 + }, + { + "ns": 217575917, + "wall_ns": 468647750, + "cpu_ns": 466646000, + "rss_bytes": 32473088, + "work_cpu_ns": 217573000 + }, + { + "ns": 217317791, + "wall_ns": 461026333, + "cpu_ns": 459138000, + "rss_bytes": 32407552, + "work_cpu_ns": 217308000 + }, + { + "ns": 234560708, + "wall_ns": 497061583, + "cpu_ns": 495019000, + "rss_bytes": 32342016, + "work_cpu_ns": 234555000 + }, + { + "ns": 224926667, + "wall_ns": 482008292, + "cpu_ns": 479587000, + "rss_bytes": 32358400, + "work_cpu_ns": 224903000 + }, + { + "ns": 214610959, + "wall_ns": 456047667, + "cpu_ns": 453827000, + "rss_bytes": 32391168, + "work_cpu_ns": 214607000 + } + ], + "ns": 224926667, + "wall_ns": 482008292, + "cpu_ns": 479587000, + "rss_bytes": 32391168, + "work_cpu_ns": 224903000 + }, + "base_interp": { + "samples": [ + { + "ns": 328892042, + "wall_ns": 702348583, + "cpu_ns": 699199000, + "rss_bytes": 30064640, + "work_cpu_ns": 328558000 + }, + { + "ns": 287938250, + "wall_ns": 627453417, + "cpu_ns": 624957000, + "rss_bytes": 29949952, + "work_cpu_ns": 287908000 + }, + { + "ns": 227899292, + "wall_ns": 485194625, + "cpu_ns": 483013000, + "rss_bytes": 30081024, + "work_cpu_ns": 227897000 + }, + { + "ns": 220380667, + "wall_ns": 460467083, + "cpu_ns": 458449000, + "rss_bytes": 29999104, + "work_cpu_ns": 220356000 + }, + { + "ns": 233147250, + "wall_ns": 494257000, + "cpu_ns": 492119000, + "rss_bytes": 30097408, + "work_cpu_ns": 233141000 + }, + { + "ns": 222347167, + "wall_ns": 473099125, + "cpu_ns": 471086000, + "rss_bytes": 30064640, + "work_cpu_ns": 222346000 + }, + { + "ns": 229520208, + "wall_ns": 488424584, + "cpu_ns": 485861000, + "rss_bytes": 29966336, + "work_cpu_ns": 229512000 + } + ], + "ns": 229520208, + "wall_ns": 488424584, + "cpu_ns": 485861000, + "rss_bytes": 30064640, + "work_cpu_ns": 229512000 + }, + "new_interp": { + "samples": [ + { + "ns": 326890125, + "wall_ns": 763555792, + "cpu_ns": 750306000, + "rss_bytes": 30146560, + "work_cpu_ns": 326645000 + }, + { + "ns": 275837458, + "wall_ns": 590241333, + "cpu_ns": 587432000, + "rss_bytes": 29966336, + "work_cpu_ns": 275833000 + }, + { + "ns": 239828792, + "wall_ns": 533848208, + "cpu_ns": 531706000, + "rss_bytes": 30081024, + "work_cpu_ns": 239825000 + }, + { + "ns": 237298333, + "wall_ns": 502269291, + "cpu_ns": 500319000, + "rss_bytes": 29933568, + "work_cpu_ns": 237277000 + }, + { + "ns": 232090792, + "wall_ns": 494138750, + "cpu_ns": 492183000, + "rss_bytes": 29933568, + "work_cpu_ns": 232074000 + }, + { + "ns": 215914292, + "wall_ns": 460818958, + "cpu_ns": 458763000, + "rss_bytes": 29982720, + "work_cpu_ns": 215910000 + }, + { + "ns": 214629375, + "wall_ns": 455514792, + "cpu_ns": 453689000, + "rss_bytes": 29933568, + "work_cpu_ns": 214627000 + } + ], + "ns": 237298333, + "wall_ns": 502269291, + "cpu_ns": 500319000, + "rss_bytes": 29966336, + "work_cpu_ns": 237277000 + }, + "cpython": { + "samples": [ + { + "ns": 43171833, + "wall_ns": 117188042, + "cpu_ns": 111384000, + "rss_bytes": 15908864, + "work_cpu_ns": 41094000 + }, + { + "ns": 30031666, + "wall_ns": 85116083, + "cpu_ns": 82505000, + "rss_bytes": 15974400, + "work_cpu_ns": 30030000 + }, + { + "ns": 29722500, + "wall_ns": 82927750, + "cpu_ns": 80784000, + "rss_bytes": 15876096, + "work_cpu_ns": 29720000 + }, + { + "ns": 27274625, + "wall_ns": 76388917, + "cpu_ns": 74411000, + "rss_bytes": 15941632, + "work_cpu_ns": 27273000 + }, + { + "ns": 27282667, + "wall_ns": 76723375, + "cpu_ns": 74713000, + "rss_bytes": 15859712, + "work_cpu_ns": 27282000 + }, + { + "ns": 24100791, + "wall_ns": 68124250, + "cpu_ns": 66076000, + "rss_bytes": 15892480, + "work_cpu_ns": 24100000 + }, + { + "ns": 23815166, + "wall_ns": 66593708, + "cpu_ns": 64772000, + "rss_bytes": 15892480, + "work_cpu_ns": 23815000 + } + ], + "ns": 27282667, + "wall_ns": 76723375, + "cpu_ns": 74713000, + "rss_bytes": 15892480, + "work_cpu_ns": 27282000 + }, + "comparisons": { + "jit": { + "ns": 1.0010729259696236, + "wall_ns": 0.9937839557348211, + "cpu_ns": 0.9933956773895768, + "rss_bytes": 0.9964521033958439, + "work_cpu_ns": 1.0010733617413337 + }, + "interp": { + "ns": 0.9939131485583346, + "wall_ns": 0.9997607519974426, + "cpu_ns": 1.0001300498456673, + "rss_bytes": 0.9989065062875888, + "work_cpu_ns": 0.9941775881275148 + } + } + }, + "json_bench": { + "work": 150, + "base": { + "samples": [ + { + "ns": 247517000, + "wall_ns": 552923750, + "cpu_ns": 551088000, + "rss_bytes": 45072384, + "work_cpu_ns": 247507000 + }, + { + "ns": 245643041, + "wall_ns": 549461333, + "cpu_ns": 547666000, + "rss_bytes": 45252608, + "work_cpu_ns": 245641000 + }, + { + "ns": 245249375, + "wall_ns": 555801250, + "cpu_ns": 554132000, + "rss_bytes": 44941312, + "work_cpu_ns": 245246000 + }, + { + "ns": 252944416, + "wall_ns": 557619375, + "cpu_ns": 555906000, + "rss_bytes": 45137920, + "work_cpu_ns": 252915000 + }, + { + "ns": 269177500, + "wall_ns": 604180625, + "cpu_ns": 602240000, + "rss_bytes": 44892160, + "work_cpu_ns": 269170000 + }, + { + "ns": 268037417, + "wall_ns": 599629167, + "cpu_ns": 597642000, + "rss_bytes": 45121536, + "work_cpu_ns": 268034000 + }, + { + "ns": 267663417, + "wall_ns": 597831625, + "cpu_ns": 595982000, + "rss_bytes": 45039616, + "work_cpu_ns": 267660000 + } + ], + "ns": 252944416, + "wall_ns": 557619375, + "cpu_ns": 555906000, + "rss_bytes": 45072384, + "work_cpu_ns": 252915000 + }, + "new": { + "samples": [ + { + "ns": 242409250, + "wall_ns": 543520250, + "cpu_ns": 541740000, + "rss_bytes": 45203456, + "work_cpu_ns": 242407000 + }, + { + "ns": 246564625, + "wall_ns": 548962916, + "cpu_ns": 547198000, + "rss_bytes": 44924928, + "work_cpu_ns": 246559000 + }, + { + "ns": 246498750, + "wall_ns": 549064375, + "cpu_ns": 547238000, + "rss_bytes": 45088768, + "work_cpu_ns": 246486000 + }, + { + "ns": 271104208, + "wall_ns": 601156750, + "cpu_ns": 599377000, + "rss_bytes": 45072384, + "work_cpu_ns": 271098000 + }, + { + "ns": 273677542, + "wall_ns": 612215750, + "cpu_ns": 610317000, + "rss_bytes": 44941312, + "work_cpu_ns": 273674000 + }, + { + "ns": 272510708, + "wall_ns": 610022417, + "cpu_ns": 608727000, + "rss_bytes": 44957696, + "work_cpu_ns": 272508000 + }, + { + "ns": 269047958, + "wall_ns": 603310625, + "cpu_ns": 601472000, + "rss_bytes": 45088768, + "work_cpu_ns": 269019000 + } + ], + "ns": 269047958, + "wall_ns": 601156750, + "cpu_ns": 599377000, + "rss_bytes": 45072384, + "work_cpu_ns": 269019000 + }, + "base_interp": { + "samples": [ + { + "ns": 247937375, + "wall_ns": 546854500, + "cpu_ns": 545016000, + "rss_bytes": 41975808, + "work_cpu_ns": 247872000 + }, + { + "ns": 246209917, + "wall_ns": 547366208, + "cpu_ns": 545750000, + "rss_bytes": 41975808, + "work_cpu_ns": 246207000 + }, + { + "ns": 245098875, + "wall_ns": 544619958, + "cpu_ns": 542853000, + "rss_bytes": 41959424, + "work_cpu_ns": 245086000 + }, + { + "ns": 277290250, + "wall_ns": 611774625, + "cpu_ns": 609904000, + "rss_bytes": 41943040, + "work_cpu_ns": 277286000 + }, + { + "ns": 272619458, + "wall_ns": 605465083, + "cpu_ns": 603644000, + "rss_bytes": 41975808, + "work_cpu_ns": 272610000 + }, + { + "ns": 269905958, + "wall_ns": 597449125, + "cpu_ns": 595570000, + "rss_bytes": 41861120, + "work_cpu_ns": 269885000 + }, + { + "ns": 270293375, + "wall_ns": 599314666, + "cpu_ns": 597515000, + "rss_bytes": 42057728, + "work_cpu_ns": 270288000 + } + ], + "ns": 269905958, + "wall_ns": 597449125, + "cpu_ns": 595570000, + "rss_bytes": 41975808, + "work_cpu_ns": 269885000 + }, + "new_interp": { + "samples": [ + { + "ns": 244971292, + "wall_ns": 543940375, + "cpu_ns": 542232000, + "rss_bytes": 41877504, + "work_cpu_ns": 244965000 + }, + { + "ns": 245155584, + "wall_ns": 543160834, + "cpu_ns": 541421000, + "rss_bytes": 41844736, + "work_cpu_ns": 245153000 + }, + { + "ns": 246991708, + "wall_ns": 547272750, + "cpu_ns": 545533000, + "rss_bytes": 41795584, + "work_cpu_ns": 246989000 + }, + { + "ns": 278374417, + "wall_ns": 619340625, + "cpu_ns": 617458000, + "rss_bytes": 42139648, + "work_cpu_ns": 278372000 + }, + { + "ns": 277561917, + "wall_ns": 617567458, + "cpu_ns": 615761000, + "rss_bytes": 41762816, + "work_cpu_ns": 277557000 + }, + { + "ns": 270415708, + "wall_ns": 599885792, + "cpu_ns": 598028000, + "rss_bytes": 41811968, + "work_cpu_ns": 270414000 + }, + { + "ns": 268619417, + "wall_ns": 595861167, + "cpu_ns": 594174000, + "rss_bytes": 42041344, + "work_cpu_ns": 268588000 + } + ], + "ns": 268619417, + "wall_ns": 595861167, + "cpu_ns": 594174000, + "rss_bytes": 41844736, + "work_cpu_ns": 268588000 + }, + "cpython": { + "samples": [ + { + "ns": 43767250, + "wall_ns": 107801083, + "cpu_ns": 105917000, + "rss_bytes": 16269312, + "work_cpu_ns": 43765000 + }, + { + "ns": 45078042, + "wall_ns": 110914542, + "cpu_ns": 109034000, + "rss_bytes": 16318464, + "work_cpu_ns": 45076000 + }, + { + "ns": 45205125, + "wall_ns": 110581083, + "cpu_ns": 108986000, + "rss_bytes": 16596992, + "work_cpu_ns": 45203000 + }, + { + "ns": 50549334, + "wall_ns": 123141958, + "cpu_ns": 121211000, + "rss_bytes": 16515072, + "work_cpu_ns": 50548000 + }, + { + "ns": 50635458, + "wall_ns": 123894833, + "cpu_ns": 122006000, + "rss_bytes": 16564224, + "work_cpu_ns": 50633000 + }, + { + "ns": 48480458, + "wall_ns": 119257542, + "cpu_ns": 117344000, + "rss_bytes": 16662528, + "work_cpu_ns": 48475000 + }, + { + "ns": 48833583, + "wall_ns": 119263458, + "cpu_ns": 117459000, + "rss_bytes": 16629760, + "work_cpu_ns": 48832000 + } + ], + "ns": 48480458, + "wall_ns": 119257542, + "cpu_ns": 117344000, + "rss_bytes": 16564224, + "work_cpu_ns": 48475000 + }, + "comparisons": { + "jit": { + "ns": 1.0051726941825598, + "wall_ns": 1.009164787828011, + "cpu_ns": 1.0092116876013033, + "rss_bytes": 1.0010913059294289, + "work_cpu_ns": 1.005077336919973 + }, + "interp": { + "ns": 1.0018886207765743, + "wall_ns": 1.0040784510312908, + "cpu_ns": 1.0041271387074566, + "rss_bytes": 0.9976580796252927, + "work_cpu_ns": 1.0019600941141598 + } + } + }, + "str_methods": { + "work": 15000, + "base": { + "samples": [ + { + "ns": 195775833, + "wall_ns": 436883417, + "cpu_ns": 434966000, + "rss_bytes": 60948480, + "work_cpu_ns": 195770000 + }, + { + "ns": 192819459, + "wall_ns": 431760750, + "cpu_ns": 429802000, + "rss_bytes": 60882944, + "work_cpu_ns": 192805000 + }, + { + "ns": 195144917, + "wall_ns": 436562667, + "cpu_ns": 434621000, + "rss_bytes": 60801024, + "work_cpu_ns": 195139000 + }, + { + "ns": 195423750, + "wall_ns": 437330458, + "cpu_ns": 435236000, + "rss_bytes": 60866560, + "work_cpu_ns": 195417000 + }, + { + "ns": 194775542, + "wall_ns": 436772500, + "cpu_ns": 434894000, + "rss_bytes": 60948480, + "work_cpu_ns": 194771000 + }, + { + "ns": 194212958, + "wall_ns": 434328625, + "cpu_ns": 432470000, + "rss_bytes": 60882944, + "work_cpu_ns": 194208000 + }, + { + "ns": 201616208, + "wall_ns": 449571375, + "cpu_ns": 447581000, + "rss_bytes": 60866560, + "work_cpu_ns": 201611000 + } + ], + "ns": 195144917, + "wall_ns": 436772500, + "cpu_ns": 434894000, + "rss_bytes": 60882944, + "work_cpu_ns": 195139000 + }, + "new": { + "samples": [ + { + "ns": 98222167, + "wall_ns": 241827291, + "cpu_ns": 239949000, + "rss_bytes": 60817408, + "work_cpu_ns": 98215000 + }, + { + "ns": 97425541, + "wall_ns": 240288541, + "cpu_ns": 238478000, + "rss_bytes": 60702720, + "work_cpu_ns": 97421000 + }, + { + "ns": 96234708, + "wall_ns": 238262542, + "cpu_ns": 236404000, + "rss_bytes": 60768256, + "work_cpu_ns": 96231000 + }, + { + "ns": 98335667, + "wall_ns": 243150625, + "cpu_ns": 241236000, + "rss_bytes": 60866560, + "work_cpu_ns": 98331000 + }, + { + "ns": 97745458, + "wall_ns": 240127334, + "cpu_ns": 238186000, + "rss_bytes": 60899328, + "work_cpu_ns": 97736000 + }, + { + "ns": 96634250, + "wall_ns": 237616834, + "cpu_ns": 235733000, + "rss_bytes": 60801024, + "work_cpu_ns": 96629000 + }, + { + "ns": 101946250, + "wall_ns": 248916250, + "cpu_ns": 246713000, + "rss_bytes": 60866560, + "work_cpu_ns": 101939000 + } + ], + "ns": 97745458, + "wall_ns": 240288541, + "cpu_ns": 238478000, + "rss_bytes": 60817408, + "work_cpu_ns": 97736000 + }, + "base_interp": { + "samples": [ + { + "ns": 208659833, + "wall_ns": 447982375, + "cpu_ns": 446029000, + "rss_bytes": 29868032, + "work_cpu_ns": 208658000 + }, + { + "ns": 205551250, + "wall_ns": 439353500, + "cpu_ns": 437597000, + "rss_bytes": 29917184, + "work_cpu_ns": 205533000 + }, + { + "ns": 208480333, + "wall_ns": 445878167, + "cpu_ns": 444114000, + "rss_bytes": 29868032, + "work_cpu_ns": 208474000 + }, + { + "ns": 209587333, + "wall_ns": 449301375, + "cpu_ns": 447532000, + "rss_bytes": 29982720, + "work_cpu_ns": 209580000 + }, + { + "ns": 206057375, + "wall_ns": 440493459, + "cpu_ns": 438697000, + "rss_bytes": 29933568, + "work_cpu_ns": 206055000 + }, + { + "ns": 214653375, + "wall_ns": 453694417, + "cpu_ns": 451725000, + "rss_bytes": 29868032, + "work_cpu_ns": 214464000 + }, + { + "ns": 212209292, + "wall_ns": 450640250, + "cpu_ns": 448815000, + "rss_bytes": 29868032, + "work_cpu_ns": 212207000 + } + ], + "ns": 208659833, + "wall_ns": 447982375, + "cpu_ns": 446029000, + "rss_bytes": 29868032, + "work_cpu_ns": 208658000 + }, + "new_interp": { + "samples": [ + { + "ns": 111319584, + "wall_ns": 254082625, + "cpu_ns": 252322000, + "rss_bytes": 29818880, + "work_cpu_ns": 111315000 + }, + { + "ns": 108050250, + "wall_ns": 245918333, + "cpu_ns": 244198000, + "rss_bytes": 29769728, + "work_cpu_ns": 108048000 + }, + { + "ns": 108819541, + "wall_ns": 246008041, + "cpu_ns": 244362000, + "rss_bytes": 29769728, + "work_cpu_ns": 108814000 + }, + { + "ns": 109035875, + "wall_ns": 246115208, + "cpu_ns": 244377000, + "rss_bytes": 29818880, + "work_cpu_ns": 109034000 + }, + { + "ns": 109968416, + "wall_ns": 248016209, + "cpu_ns": 246237000, + "rss_bytes": 29769728, + "work_cpu_ns": 109938000 + }, + { + "ns": 109945208, + "wall_ns": 249989000, + "cpu_ns": 248184000, + "rss_bytes": 29786112, + "work_cpu_ns": 109942000 + }, + { + "ns": 109439583, + "wall_ns": 248163125, + "cpu_ns": 246459000, + "rss_bytes": 29835264, + "work_cpu_ns": 109413000 + } + ], + "ns": 109439583, + "wall_ns": 248016209, + "cpu_ns": 246237000, + "rss_bytes": 29786112, + "work_cpu_ns": 109413000 + }, + "cpython": { + "samples": [ + { + "ns": 36042959, + "wall_ns": 93432375, + "cpu_ns": 91487000, + "rss_bytes": 15679488, + "work_cpu_ns": 36042000 + }, + { + "ns": 34863000, + "wall_ns": 89306000, + "cpu_ns": 87494000, + "rss_bytes": 15679488, + "work_cpu_ns": 34861000 + }, + { + "ns": 35722750, + "wall_ns": 90353000, + "cpu_ns": 88556000, + "rss_bytes": 15630336, + "work_cpu_ns": 35722000 + }, + { + "ns": 35182792, + "wall_ns": 90582458, + "cpu_ns": 88625000, + "rss_bytes": 15663104, + "work_cpu_ns": 35181000 + }, + { + "ns": 36087000, + "wall_ns": 92074375, + "cpu_ns": 90263000, + "rss_bytes": 15695872, + "work_cpu_ns": 36086000 + }, + { + "ns": 35146791, + "wall_ns": 91312708, + "cpu_ns": 89396000, + "rss_bytes": 15745024, + "work_cpu_ns": 35145000 + }, + { + "ns": 35356875, + "wall_ns": 90901167, + "cpu_ns": 89363000, + "rss_bytes": 15630336, + "work_cpu_ns": 35355000 + } + ], + "ns": 35356875, + "wall_ns": 90901167, + "cpu_ns": 89363000, + "rss_bytes": 15679488, + "work_cpu_ns": 35355000 + }, + "comparisons": { + "jit": { + "ns": 0.5018364061335792, + "wall_ns": 0.5535281990343891, + "cpu_ns": 0.5512141936319906, + "rss_bytes": 0.9991935483870967, + "work_cpu_ns": 0.5017995492142054 + }, + "interp": { + "ns": 0.5219654987792062, + "wall_ns": 0.5517382531986591, + "cpu_ns": 0.550223591240087, + "rss_bytes": 0.9967087218869994, + "work_cpu_ns": 0.5219547761351535 + } + } + } + } +} diff --git a/crates/weavepy-compiler/src/flowgraph.rs b/crates/weavepy-compiler/src/flowgraph.rs index 76feb7fa..a4be97f7 100644 --- a/crates/weavepy-compiler/src/flowgraph.rs +++ b/crates/weavepy-compiler/src/flowgraph.rs @@ -424,6 +424,7 @@ struct Cfg { entry: BlockId, handlers: Vec, consts: Vec, + constant_index: crate::intern::InternIndex, /// Whether the prefix stage must insert `RETURN_GENERATOR; POP_TOP`. generator_prefix: bool, /// `co_firstlineno`, for the prefix locations. @@ -520,11 +521,8 @@ impl Cfg { /// `add_const`: find or append, returning the pool index. fn add_const(&mut self, c: Constant) -> u32 { - if let Some(i) = self.consts.iter().position(|x| *x == c) { - return i as u32; - } - self.consts.push(c); - (self.consts.len() - 1) as u32 + self.constant_index + .intern(&mut self.consts, c, crate::intern::constant_hash) } /// `maybe_instr_make_load_smallint`. @@ -721,6 +719,7 @@ fn build(co: &mut CodeObject, input: &BuildInput<'_>) -> Cfg { entry: 0, handlers: Vec::new(), consts: std::mem::take(&mut co.constants), + constant_index: crate::intern::InternIndex::default(), generator_prefix, firstlineno, }; @@ -2066,6 +2065,7 @@ impl Cfg { } } self.consts = new_consts; + self.constant_index = crate::intern::InternIndex::default(); for b in self.chain() { for instr in self.blocks[b].instrs_mut() { if instr.op == OpCode::LoadConst { diff --git a/crates/weavepy-compiler/src/intern.rs b/crates/weavepy-compiler/src/intern.rs new file mode 100644 index 00000000..02d40507 --- /dev/null +++ b/crates/weavepy-compiler/src/intern.rs @@ -0,0 +1,195 @@ +//! Temporary indexes for the compiler's append-only constant and name pools. +//! +//! Small pools use a linear scan without allocating an index. Larger pools +//! keep collision chains of slot numbers, so indexing never clones a string, +//! tuple, or nested code object. Equality remains the pool's existing rule. + +use std::collections::hash_map::DefaultHasher; +use std::collections::HashMap; +use std::hash::{Hash, Hasher}; + +use crate::Constant; + +#[derive(Default)] +pub(crate) struct InternIndex { + heads: HashMap, + next: Vec>, +} + +impl InternIndex { + pub(crate) fn intern( + &mut self, + values: &mut Vec, + value: T, + hash: impl Fn(&T) -> u64, + ) -> u32 { + const INDEX_THRESHOLD: usize = 32; + if values.len() < INDEX_THRESHOLD { + if let Some(i) = values.iter().position(|v| v == &value) { + return i as u32; + } + let i = values.len() as u32; + values.push(value); + return i; + } + let key = hash(&value); + if let Some(i) = self.find(values, &hash, key, |v| v == &value) { + return i; + } + let i = values.len() as u32; + self.next.push(self.heads.insert(key, i)); + values.push(value); + i + } + + pub(crate) fn intern_name(&mut self, values: &mut Vec, name: &str) -> u32 { + if values.len() < 32 { + if let Some(i) = values.iter().position(|v| v == name) { + return i as u32; + } + } else { + let key = name_hash(name); + if let Some(i) = self.find(values, &|v| name_hash(v), key, |v| v == name) { + return i; + } + self.next.push(self.heads.insert(key, values.len() as u32)); + } + let i = values.len() as u32; + values.push(name.to_owned()); + i + } + + fn find( + &mut self, + values: &[T], + hash: &impl Fn(&T) -> u64, + key: u64, + equal: impl Fn(&T) -> bool, + ) -> Option { + // Callers may seed the pool before the first intern operation. + for (i, v) in values.iter().enumerate().skip(self.next.len()) { + self.next.push(self.heads.insert(hash(v), i as u32)); + } + debug_assert_eq!(self.next.len(), values.len()); + let mut slot = self.heads.get(&key).copied(); + // Preserve the first equal slot, including in a preseeded pool. + let mut found = None; + while let Some(i) = slot { + if equal(&values[i as usize]) { + found = Some(i); + } + slot = self.next[i as usize]; + } + found + } +} + +fn name_hash(name: &str) -> u64 { + let mut state = DefaultHasher::new(); + name.hash(&mut state); + state.finish() +} + +pub(crate) fn constant_hash(value: &Constant) -> u64 { + fn hash(value: &Constant, state: &mut impl Hasher) { + std::mem::discriminant(value).hash(state); + match value { + Constant::Bool(v) => v.hash(state), + Constant::Int(v) => v.hash(state), + Constant::BigInt(v) => v.hash(state), + Constant::Float(v) => v.to_bits().hash(state), + Constant::Complex(r, i) => { + r.to_bits().hash(state); + i.to_bits().hash(state); + } + Constant::Str(v) => v.hash(state), + Constant::WStr(v) => v.hash(state), + Constant::Bytes(v) => v.hash(state), + Constant::Tuple(v) => { + v.len().hash(state); + for item in v { + hash(item, state); + } + } + // Equality ignores order and, for equal lengths, multiplicity. + // Keep the coarse key and resolve these uncommon constants by + // equality rather than introducing a different equivalence rule. + Constant::FrozenSet(v) => v.len().hash(state), + Constant::Code(v) => { + v.name.hash(state); + v.qualname.hash(state); + v.instructions.len().hash(state); + } + Constant::Slice(v) => { + hash(&v.0, state); + hash(&v.1, state); + hash(&v.2, state); + } + _ => {} + } + } + let mut state = DefaultHasher::new(); + hash(value, &mut state); + state.finish() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn collisions_and_threshold_keep_first_slot() { + let mut index = InternIndex::default(); + let mut values = Vec::new(); + for i in 0..100 { + assert_eq!(index.intern(&mut values, i, |_| 0), i); + } + for i in (0..100).rev() { + assert_eq!(index.intern(&mut values, i, |_| 0), i); + } + assert_eq!(values.len(), 100); + let mut seeded = vec![1; 40]; + assert_eq!(InternIndex::default().intern(&mut seeded, 1, |_| 0), 0); + } + + #[test] + fn names_cross_threshold_without_changing_order() { + let mut index = InternIndex::default(); + let mut names = Vec::new(); + for i in 0..100 { + assert_eq!(index.intern_name(&mut names, &format!("name_{i}")), i); + } + for i in (0..100).rev() { + assert_eq!(index.intern_name(&mut names, &format!("name_{i}")), i); + } + assert_eq!(names.len(), 100); + } + + #[test] + fn constant_keys_preserve_python_pool_equality() { + let mut index = InternIndex::default(); + let mut values: Vec<_> = (0..40).map(Constant::Int).collect(); + let cases = [ + Constant::Bool(true), + Constant::Float(0.0), + Constant::Float(-0.0), + Constant::Complex(0.0, -0.0), + Constant::Str("abc".into()), + Constant::Bytes(b"abc".to_vec()), + Constant::Tuple(vec![Constant::Float(-0.0)]), + Constant::FrozenSet(vec![Constant::Int(1), Constant::Int(2)]), + Constant::Slice(Box::new((Constant::Int(1), Constant::None, Constant::None))), + ]; + for c in cases { + let slot = values.len() as u32; + assert_eq!(index.intern(&mut values, c.clone(), constant_hash), slot); + assert_eq!(index.intern(&mut values, c, constant_hash), slot); + } + let reversed = Constant::FrozenSet(vec![Constant::Int(2), Constant::Int(1)]); + assert_eq!(index.intern(&mut values, reversed, constant_hash), 47); + let nan = Constant::Float(f64::NAN); + let a = index.intern(&mut values, nan.clone(), constant_hash); + let b = index.intern(&mut values, nan, constant_hash); + assert_ne!(a, b); + } +} diff --git a/crates/weavepy-compiler/src/lib.rs b/crates/weavepy-compiler/src/lib.rs index 53498ec3..cd210ca9 100644 --- a/crates/weavepy-compiler/src/lib.rs +++ b/crates/weavepy-compiler/src/lib.rs @@ -36,6 +36,7 @@ mod ast_opt; pub mod bytecode; pub mod cpython_code; mod flowgraph; +mod intern; mod mangle; mod validate; @@ -520,27 +521,6 @@ impl CodeObject { && self.no_interrupt_jumps == other.no_interrupt_jumps } - /// Find or insert a constant; returns its index. - fn intern_constant(&mut self, c: Constant) -> u32 { - for (i, existing) in self.constants.iter().enumerate() { - if existing == &c { - return i as u32; - } - } - self.constants.push(c); - (self.constants.len() - 1) as u32 - } - - fn intern_name(&mut self, n: &str) -> u32 { - for (i, existing) in self.names.iter().enumerate() { - if existing == n { - return i as u32; - } - } - self.names.push(n.to_owned()); - (self.names.len() - 1) as u32 - } - /// Render this code object as a `dis`-style listing. pub fn format_dis(&self) -> String { let mut out = String::new(); @@ -1535,6 +1515,8 @@ enum Binding { struct Compiler { co: CodeObject, + constant_index: intern::InternIndex, + name_index: intern::InternIndex, kind: CodeKind, /// Which comprehension form this scope lowers (`None` outside /// comprehensions). Drives CPython's "'yield' inside list @@ -1988,6 +1970,8 @@ impl Compiler { co.future_flags = params.future_flags; Self { co, + constant_index: intern::InternIndex::default(), + name_index: intern::InternIndex::default(), kind, comp_kind: None, bindings: IndexMap::new(), @@ -2041,6 +2025,15 @@ impl Compiler { } } + fn intern_name(&mut self, name: &str) -> u32 { + self.name_index.intern_name(&mut self.co.names, name) + } + + fn intern_constant(&mut self, c: Constant) -> u32 { + self.constant_index + .intern(&mut self.co.constants, c, intern::constant_hash) + } + /// CPython `ste_new`: a child scope is nested when this scope is /// function-like (a def, lambda, or comprehension, including the /// body of a PEP 709 inlined comprehension) or is itself nested. @@ -2232,7 +2225,7 @@ impl Compiler { let wrap = self.stopiteration_wrap && (self.co.is_generator || self.co.is_coroutine || self.co.is_async_generator); if wrap { - let none_idx = self.co.intern_constant(Constant::None); + let none_idx = self.intern_constant(Constant::None); self.emit_no_line(OpCode::LoadConst, none_idx); self.emit_no_line(OpCode::ReturnValue, 0); let handler = self.next_offset(); @@ -2254,7 +2247,7 @@ impl Compiler { } // `_PyCodegen_AddReturnAtEnd`: every stream falling off its end // returns None (and no jump target is out of bounds). - let none_idx = self.co.intern_constant(Constant::None); + let none_idx = self.intern_constant(Constant::None); self.emit_no_line(OpCode::LoadConst, none_idx); self.emit_no_line(OpCode::ReturnValue, 0); @@ -2652,9 +2645,7 @@ impl Compiler { let mut end_jumps = Vec::with_capacity(2); if !is_tuple { // Early exit: the opposite of the builtin's initial result. - let idx = self - .co - .intern_constant(Constant::Bool(const_oparg != COMMON_CONSTANT_ALL)); + let idx = self.intern_constant(Constant::Bool(const_oparg != COMMON_CONSTANT_ALL)); self.emit(OpCode::LoadConst, idx); } let j = self.emit(OpCode::JumpForward, 0); @@ -2668,9 +2659,7 @@ impl Compiler { if is_tuple { self.emit(OpCode::ListToTuple, 0); } else { - let idx = self - .co - .intern_constant(Constant::Bool(const_oparg == COMMON_CONSTANT_ALL)); + let idx = self.intern_constant(Constant::Bool(const_oparg == COMMON_CONSTANT_ALL)); self.emit(OpCode::LoadConst, idx); } let j = self.emit(OpCode::JumpForward, 0); @@ -2756,7 +2745,7 @@ impl Compiler { self.emit_load_name(&first_param); self.current_span = saved; } - let namei = self.co.intern_name(attr); + let namei = self.intern_name(attr); let arg = (namei << 2) | u32::from(method) | (u32::from(two_arg) << 1); self.emit(OpCode::LoadSuperAttr, arg); self.with_attr_location(attr_expr.span.end.0, attr.len() as u32, |c| { @@ -2860,7 +2849,7 @@ impl Compiler { self.apply_annotate_loc(loc); } self.emit(OpCode::BuildSet, 0); - let idx = self.co.intern_name("__conditional_annotations__"); + let idx = self.intern_name("__conditional_annotations__"); self.emit(OpCode::StoreName, idx); } // Under PEP 563 (`codegen_body`): SETUP_ANNOTATIONS as the first @@ -2883,8 +2872,8 @@ impl Compiler { if !self.interactive && !self.eval_mode { if let Some(doc) = first_stmt_docstring(&module.body) { if self.params.optimize < 2 { - let doc_const = self.co.intern_constant(Constant::Str(clean_docstring(doc))); - let doc_name = self.co.intern_name("__doc__"); + let doc_const = self.intern_constant(Constant::Str(clean_docstring(doc))); + let doc_name = self.intern_name("__doc__"); self.set_line_from(module.body[0].span.start.0); self.set_span(module.body[0].span); self.emit(OpCode::LoadConst, doc_const); @@ -2904,11 +2893,9 @@ impl Compiler { .compile_deferred_annotations(loc)? .expect("placeholder implies deferred annotations"); debug_assert!(code.freevars.is_empty()); - let code_idx = self - .co - .intern_constant(Constant::Code(std::sync::Arc::new(code))); + let code_idx = self.intern_constant(Constant::Code(std::sync::Arc::new(code))); self.co.instructions[load as usize].arg = code_idx; - let name_idx = self.co.intern_name("__annotate__"); + let name_idx = self.intern_name("__annotate__"); self.co.instructions[store as usize].arg = name_idx; } Ok(()) @@ -3388,7 +3375,7 @@ impl Compiler { let saved = self.current_span; self.set_span(target.span); self.emit(OpCode::CopyTop, 1); - let idx = self.co.intern_name(attr); + let idx = self.intern_name(attr); self.with_attr_location(target.span.end.0, attr.len() as u32, |c| { c.emit(OpCode::LoadAttr, idx); }); @@ -3517,10 +3504,10 @@ impl Compiler { self.cell_or_free_index("__conditional_annotations__"); self.emit(OpCode::LoadDeref, idx); } else { - let idx = self.co.intern_name("__conditional_annotations__"); + let idx = self.intern_name("__conditional_annotations__"); self.emit(OpCode::LoadName, idx); } - let c = self.co.intern_constant(Constant::Int(i64::from(i))); + let c = self.intern_constant(Constant::Int(i64::from(i))); self.emit(OpCode::LoadConst, c); self.emit(OpCode::SetAdd, 1); self.emit(OpCode::PopTop, 0); @@ -3892,7 +3879,7 @@ impl Compiler { let (ploc, holes) = self.unwind_for_return(Some((ret_span.start.0, ret_span.end.0)), !const_ret)?; if let Some(c) = const_value { - let idx = self.co.intern_constant(c); + let idx = self.intern_constant(c); self.emit_at(ploc, OpCode::LoadConst, idx); } self.emit_at(ploc, OpCode::ReturnValue, 0); @@ -3978,11 +3965,11 @@ impl Compiler { aliases: &[weavepy_parser::ast::Alias], ) -> Result<(), CompileError> { for alias in aliases { - let level_idx = self.co.intern_constant(Constant::Int(0)); + let level_idx = self.intern_constant(Constant::Int(0)); self.emit(OpCode::LoadConst, level_idx); - let none_idx = self.co.intern_constant(Constant::None); + let none_idx = self.intern_constant(Constant::None); self.emit(OpCode::LoadConst, none_idx); - let name_idx = self.co.intern_name(&self.import_name_mangled(&alias.name)); + let name_idx = self.intern_name(&self.import_name_mangled(&alias.name)); self.emit(OpCode::ImportName, name_idx); match &alias.asname { None => { @@ -4009,7 +3996,7 @@ impl Compiler { self.emit_store_name(asname); } else { for (i, part) in attrs.iter().enumerate() { - let idx = self.co.intern_name(&self.import_name_mangled(part)); + let idx = self.intern_name(&self.import_name_mangled(part)); self.emit(OpCode::ImportFrom, idx); if i + 1 < attrs.len() { self.emit(OpCode::Swap, 2); @@ -4044,16 +4031,16 @@ impl Compiler { names: &[weavepy_parser::ast::Alias], level: u32, ) -> Result<(), CompileError> { - let level_idx = self.co.intern_constant(Constant::Int(i64::from(level))); + let level_idx = self.intern_constant(Constant::Int(i64::from(level))); self.emit(OpCode::LoadConst, level_idx); let from_tuple: Vec = names .iter() .map(|a| Constant::Str(a.name.clone())) .collect(); - let from_idx = self.co.intern_constant(Constant::Tuple(from_tuple)); + let from_idx = self.intern_constant(Constant::Tuple(from_tuple)); self.emit(OpCode::LoadConst, from_idx); let module_name = module.unwrap_or(""); - let name_idx = self.co.intern_name(&self.import_name_mangled(module_name)); + let name_idx = self.intern_name(&self.import_name_mangled(module_name)); self.emit(OpCode::ImportName, name_idx); // `from m import *` is its own opcode and binds every public name. @@ -4067,7 +4054,7 @@ impl Compiler { } for alias in names { - let from_idx = self.co.intern_name(&self.import_name_mangled(&alias.name)); + let from_idx = self.intern_name(&self.import_name_mangled(&alias.name)); self.emit(OpCode::ImportFrom, from_idx); let target = alias.asname.as_deref().unwrap_or(&alias.name); self.emit_store_name(target); @@ -4284,7 +4271,7 @@ impl Compiler { self.patma_jump_to_fail_pop(pc, OpCode::PopJumpIfFalse); } PatternKind::Singleton(c) => { - let idx = self.co.intern_constant(c.clone().into()); + let idx = self.intern_constant(c.clone().into()); self.emit(OpCode::LoadConst, idx); self.emit(OpCode::IsOp, 0); self.patma_jump_to_fail_pop(pc, OpCode::PopJumpIfFalse); @@ -4356,7 +4343,7 @@ impl Compiler { None => { // No star: len(subject) == size self.emit(OpCode::GetLen, 0); - let idx = self.co.intern_constant(Constant::Int(size as i64)); + let idx = self.intern_constant(Constant::Int(size as i64)); self.emit(OpCode::LoadConst, idx); self.emit(OpCode::CompareOp, CompareKind::Eq as u32); self.patma_jump_to_fail_pop(pc, OpCode::PopJumpIfFalse); @@ -4364,7 +4351,7 @@ impl Compiler { Some(_) if size > 1 => { // Star: len(subject) >= size - 1 self.emit(OpCode::GetLen, 0); - let idx = self.co.intern_constant(Constant::Int((size - 1) as i64)); + let idx = self.intern_constant(Constant::Int((size - 1) as i64)); self.emit(OpCode::LoadConst, idx); self.emit(OpCode::CompareOp, CompareKind::GtE as u32); self.patma_jump_to_fail_pop(pc, OpCode::PopJumpIfFalse); @@ -4447,13 +4434,13 @@ impl Compiler { self.set_span(pat.span); self.emit(OpCode::CopyTop, 0); if i < star { - let idx = self.co.intern_constant(Constant::Int(i as i64)); + let idx = self.intern_constant(Constant::Int(i as i64)); self.emit(OpCode::LoadConst, idx); } else { // The subject may not support negative indexing! Compute // a nonnegative index: self.emit(OpCode::GetLen, 0); - let idx = self.co.intern_constant(Constant::Int((size - i) as i64)); + let idx = self.intern_constant(Constant::Int((size - i) as i64)); self.emit(OpCode::LoadConst, idx); self.emit(OpCode::BinaryOp, BinOpKind::Sub as u32); } @@ -4492,7 +4479,7 @@ impl Compiler { if size > 0 { // If the pattern has any keys in it, perform a length check: self.emit(OpCode::GetLen, 0); - let idx = self.co.intern_constant(Constant::Int(size as i64)); + let idx = self.intern_constant(Constant::Int(size as i64)); self.emit(OpCode::LoadConst, idx); self.emit(OpCode::CompareOp, CompareKind::GtE as u32); self.patma_jump_to_fail_pop(pc, OpCode::PopJumpIfFalse); @@ -4511,7 +4498,7 @@ impl Compiler { self.emit(OpCode::MatchKeys, 0); pc.on_top += 2; self.emit(OpCode::CopyTop, 0); - let none_idx = self.co.intern_constant(Constant::None); + let none_idx = self.intern_constant(Constant::None); self.emit(OpCode::LoadConst, none_idx); self.emit(OpCode::IsOp, 1); self.patma_jump_to_fail_pop(pc, OpCode::PopJumpIfFalse); @@ -4575,11 +4562,11 @@ impl Compiler { Constant::Str(n.clone()) }) .collect(); - let kw_idx = self.co.intern_constant(Constant::Tuple(kw_names)); + let kw_idx = self.intern_constant(Constant::Tuple(kw_names)); self.emit(OpCode::LoadConst, kw_idx); self.emit(OpCode::MatchClass, nargs as u32); self.emit(OpCode::CopyTop, 0); - let none_idx = self.co.intern_constant(Constant::None); + let none_idx = self.intern_constant(Constant::None); self.emit(OpCode::LoadConst, none_idx); self.emit(OpCode::IsOp, 1); // TOS is now a tuple of (nargs + nattrs) attributes (or None): @@ -5123,9 +5110,7 @@ impl Compiler { c.set_span(tp.span); }; at_param(self); - let name_idx = self - .co - .intern_constant(Constant::Str(tp.source_name.clone())); + let name_idx = self.intern_constant(Constant::Str(tp.source_name.clone())); self.emit(OpCode::LoadConst, name_idx); match &tp.kind { TypeParamKind::TypeVar { bound: None } => { @@ -5185,9 +5170,7 @@ impl Compiler { span: Some(e.span), }; self.apply_annotate_loc(loc); - let defaults = self - .co - .intern_constant(Constant::Tuple(vec![Constant::Int(1)])); + let defaults = self.intern_constant(Constant::Tuple(vec![Constant::Int(1)])); self.emit(OpCode::LoadConst, defaults); let value: &Expr = match (&e.kind, allow_starred) { (ExprKind::Starred(inner), true) => inner, @@ -5218,9 +5201,7 @@ impl Compiler { self.emit(OpCode::BuildTuple, code.freevars.len() as u32); flags |= 0x08; } - let code_idx = self - .co - .intern_constant(Constant::Code(std::sync::Arc::new(code))); + let code_idx = self.intern_constant(Constant::Code(std::sync::Arc::new(code))); self.emit(OpCode::LoadConst, code_idx); self.emit_make_function(flags); Ok(()) @@ -5252,9 +5233,9 @@ impl Compiler { span: e.span, }; if type_params.is_empty() { - let name_idx = self.co.intern_constant(Constant::Str(display.clone())); + let name_idx = self.intern_constant(Constant::Str(display.clone())); self.emit(OpCode::LoadConst, name_idx); - let none_idx = self.co.intern_constant(Constant::None); + let none_idx = self.intern_constant(Constant::None); self.emit(OpCode::LoadConst, none_idx); self.emit_type_alias_body(&display, value, span)?; } else { @@ -5302,7 +5283,7 @@ impl Compiler { |inner| { inner.current_line = stmt_line; inner.set_span(span); - let name_idx = inner.co.intern_constant(Constant::Str(display.clone())); + let name_idx = inner.intern_constant(Constant::Str(display.clone())); inner.emit(OpCode::LoadConst, name_idx); inner.emit_type_params(type_params)?; inner.current_line = stmt_line; @@ -5337,9 +5318,7 @@ impl Compiler { line: self.current_line, span: Some(span), }; - let defaults = self - .co - .intern_constant(Constant::Tuple(vec![Constant::Int(1)])); + let defaults = self.intern_constant(Constant::Tuple(vec![Constant::Int(1)])); self.emit(OpCode::LoadConst, defaults); let analysis = [Stmt { kind: StmtKind::Return(Some(value.clone())), @@ -5357,9 +5336,7 @@ impl Compiler { self.emit(OpCode::BuildTuple, code.freevars.len() as u32); flags |= 0x08; } - let code_idx = self - .co - .intern_constant(Constant::Code(std::sync::Arc::new(code))); + let code_idx = self.intern_constant(Constant::Code(std::sync::Arc::new(code))); self.emit(OpCode::LoadConst, code_idx); self.emit_make_function(flags); self.emit(OpCode::BuildTuple, 3); @@ -5391,7 +5368,7 @@ impl Compiler { .collect(); if !kw_default_pairs.is_empty() { for (name, default) in &kw_default_pairs { - let idx = self.co.intern_constant(Constant::Str((*name).into())); + let idx = self.intern_constant(Constant::Str((*name).into())); self.emit(OpCode::LoadConst, idx); self.compile_expr(default)?; } @@ -5672,9 +5649,7 @@ impl Compiler { // the AST preprocessor has already removed the docstring, so // neither the constant nor the flag appears. if let Some(doc) = first_stmt_docstring(body).filter(|_| self.params.optimize < 2) { - inner - .co - .intern_constant(Constant::Str(clean_docstring(doc))); + inner.intern_constant(Constant::Str(clean_docstring(doc))); inner.co.has_docstring = true; } // The docstring statement itself generates *no* code in a @@ -5738,9 +5713,7 @@ impl Compiler { self.emit(OpCode::BuildTuple, inner_freevars.len() as u32); flags |= 0x08; } - let code_idx = self - .co - .intern_constant(Constant::Code(std::sync::Arc::new(inner_code))); + let code_idx = self.intern_constant(Constant::Code(std::sync::Arc::new(inner_code))); self.emit(OpCode::LoadConst, code_idx); self.emit_make_function(flags); Ok(()) @@ -5843,7 +5816,7 @@ impl Compiler { // LOAD_SMALL_INT — `remove_unused_consts` never drops slot 0). inner.apply_annotate_loc(loc); inner.emit(OpCode::LoadFast, 0); - let fake_globals = inner.co.intern_constant(Constant::Int(i64::from( + let fake_globals = inner.intern_constant(Constant::Int(i64::from( ANNOTATE_FORMAT_VALUE_WITH_FAKE_GLOBALS, ))); inner.emit(OpCode::LoadConst, fake_globals); @@ -5883,9 +5856,7 @@ impl Compiler { self.emit(OpCode::BuildTuple, code.freevars.len() as u32); flags |= 0x08; } - let code_idx = self - .co - .intern_constant(Constant::Code(std::sync::Arc::new(code))); + let code_idx = self.intern_constant(Constant::Code(std::sync::Arc::new(code))); self.emit(OpCode::LoadConst, code_idx); self.emit_make_function(flags); } @@ -5967,7 +5938,7 @@ impl Compiler { let code = self.compile_annotate_code(loc, &analysis_body, |inner| { for (pname, ann) in &annotated { inner.apply_annotate_loc(loc); - let idx = inner.co.intern_constant(Constant::Str(pname.clone())); + let idx = inner.intern_constant(Constant::Str(pname.clone())); inner.emit(OpCode::LoadConst, idx); inner.emit_annotation_value(ann, loc)?; } @@ -6051,13 +6022,13 @@ impl Compiler { let mut skip: Option = None; if let Some(i) = d.cond_index { at_stmt(inner); - let c = inner.co.intern_constant(Constant::Int(i64::from(i))); + let c = inner.intern_constant(Constant::Int(i64::from(i))); inner.emit(OpCode::LoadConst, c); if is_class { let idx = inner.cell_or_free_index("__conditional_annotations__"); inner.emit(OpCode::LoadDeref, idx); } else { - let idx = inner.co.intern_name("__conditional_annotations__"); + let idx = inner.intern_name("__conditional_annotations__"); inner.emit(OpCode::LoadGlobal, idx); } inner.emit(OpCode::ContainsOp, 0); @@ -6067,7 +6038,7 @@ impl Compiler { inner.compile_expr(&d.annotation)?; at_stmt(inner); inner.emit(OpCode::CopyTop, 2); - let key = inner.co.intern_constant(Constant::Str(d.name.clone())); + let key = inner.intern_constant(Constant::Str(d.name.clone())); inner.emit(OpCode::LoadConst, key); inner.apply_annotate_loc(loc); inner.emit(OpCode::StoreSubscr, 0); @@ -6199,7 +6170,7 @@ impl Compiler { // the `ex_call` route: the two already-pushed operands // (body, name) seed the positional list. self.build_class_body(name, body, entry_line)?; - let name_idx = self.co.intern_constant(Constant::Str(display.clone())); + let name_idx = self.intern_constant(Constant::Str(display.clone())); self.emit(OpCode::LoadConst, name_idx); if generic { self.emit_generic_base(); @@ -6213,7 +6184,7 @@ impl Compiler { self.emit(OpCode::CallEx, 0); } else { self.build_class_body(name, body, entry_line)?; - let name_idx = self.co.intern_constant(Constant::Str(display)); + let name_idx = self.intern_constant(Constant::Str(display)); self.emit(OpCode::LoadConst, name_idx); if generic { self.emit_generic_base(); @@ -6234,7 +6205,7 @@ impl Compiler { names.push(Constant::Str(n)); self.compile_expr(&k.value)?; } - let tup_idx = self.co.intern_constant(Constant::Tuple(names)); + let tup_idx = self.intern_constant(Constant::Tuple(names)); self.emit(OpCode::LoadConst, tup_idx); self.emit(OpCode::CallKw, (bases.len() + 2) as u32); } @@ -6571,7 +6542,7 @@ impl Compiler { inner.emit_load_name("__name__"); inner.emit_store_name("__module__"); let qualname_str = inner.co.qualname.clone(); - let qualname_const = inner.co.intern_constant(Constant::Str(qualname_str)); + let qualname_const = inner.intern_constant(Constant::Str(qualname_str)); inner.emit(OpCode::LoadConst, qualname_const); inner.emit_store_name("__qualname__"); // A `nonlocal __firstlineno__` declaration in the class body @@ -6581,9 +6552,7 @@ impl Compiler { // (test_inspect test_getsource_on_class_without_firstlineno). // `emit_store_name` routes Free/Nonlocal bindings through // STORE_DEREF, exactly like `codegen_nameop`. - let line_const = inner - .co - .intern_constant(Constant::Int(i64::from(firstlineno))); + let line_const = inner.intern_constant(Constant::Int(i64::from(firstlineno))); inner.emit(OpCode::LoadConst, line_const); inner.emit_store_name("__firstlineno__"); // `codegen_class_body`: a generic class stores @@ -6647,9 +6616,7 @@ impl Compiler { if let Some(doc) = first_stmt_docstring(body) { // `-OO` (optimize >= 2) strips class docstrings too. if self.params.optimize < 2 { - let doc_const = inner - .co - .intern_constant(Constant::Str(clean_docstring(doc))); + let doc_const = inner.intern_constant(Constant::Str(clean_docstring(doc))); // `codegen_body`: the LOAD_CONST sits at the docstring // *expression*, so tracing a class body fires a `'line'` // event on the docstring line @@ -6722,8 +6689,8 @@ impl Compiler { let mut attrs: Vec = attrs.into_iter().collect(); attrs.sort(); let tup = Constant::Tuple(attrs.into_iter().map(Constant::Str).collect()); - let tup_const = inner.co.intern_constant(tup); - let tup_name = inner.co.intern_name("__static_attributes__"); + let tup_const = inner.intern_constant(tup); + let tup_name = inner.intern_name("__static_attributes__"); inner.emit(OpCode::LoadConst, tup_const); inner.emit(OpCode::StoreName, tup_name); } @@ -6767,9 +6734,7 @@ impl Compiler { self.emit(OpCode::BuildTuple, inner_freevars.len() as u32); flags |= 0x08; } - let code_idx = self - .co - .intern_constant(Constant::Code(std::sync::Arc::new(inner_code))); + let code_idx = self.intern_constant(Constant::Code(std::sync::Arc::new(inner_code))); self.emit(OpCode::LoadConst, code_idx); self.emit_make_function(flags); Ok(()) @@ -7969,7 +7934,7 @@ impl Compiler { None => { // `codegen_slice_two_parts`: `ADDOP_LOAD_CONST(c, // LOC(s), Py_None)` with the Slice node's location. - let idx = self.co.intern_constant(Constant::None); + let idx = self.intern_constant(Constant::None); let saved_line = self.current_line; let saved_span = self.current_span; self.set_line_from(slice.span.start.0); @@ -7986,7 +7951,7 @@ impl Compiler { /// CPython's `codegen_call_exit_with_nones`: with the exit pair at /// the top of the stack, `__exit__(None, None, None)`. fn emit_call_exit_with_nones(&mut self) { - let none_idx = self.co.intern_constant(Constant::None); + let none_idx = self.intern_constant(Constant::None); self.emit(OpCode::LoadConst, none_idx); self.emit(OpCode::LoadConst, none_idx); self.emit(OpCode::LoadConst, none_idx); @@ -8236,7 +8201,7 @@ impl Compiler { } } if let Some(text) = text { - let idx = self.co.intern_constant(Constant::Str(text)); + let idx = self.intern_constant(Constant::Str(text)); self.emit(OpCode::LoadConst, idx); return Ok(()); } @@ -8322,7 +8287,7 @@ impl Compiler { let dict_name = "__annotations__"; if !self.annotations_initialized { self.emit(OpCode::BuildMap, 0); - let idx = self.co.intern_name(dict_name); + let idx = self.intern_name(dict_name); self.emit(OpCode::StoreName, idx); self.annotations_initialized = true; } @@ -8333,9 +8298,9 @@ impl Compiler { self.emit_annotation(annotation)?; self.current_line = saved_line; self.current_span = saved_span; - let dict_idx = self.co.intern_name(dict_name); + let dict_idx = self.intern_name(dict_name); self.emit(OpCode::LoadName, dict_idx); - let key_idx = self.co.intern_constant(Constant::Str(name.to_owned())); + let key_idx = self.intern_constant(Constant::Str(name.to_owned())); self.emit(OpCode::LoadConst, key_idx); self.emit(OpCode::StoreSubscr, 0); Ok(()) @@ -8372,7 +8337,7 @@ impl Compiler { )), ExprKind::Attribute { value, attr } => { self.compile_expr(value)?; - let idx = self.co.intern_name(attr); + let idx = self.intern_name(attr); let saved = self.current_span; self.set_span(target.span); self.with_attr_location(target.span.end.0, attr.len() as u32, |c| { @@ -8679,7 +8644,7 @@ impl Compiler { for kw in keywords { let name = kw.arg.clone().expect("named keyword run"); self.note_identifier_const(&name); - let idx = self.co.intern_constant(Constant::Str(name)); + let idx = self.intern_constant(Constant::Str(name)); self.emit(OpCode::LoadConst, idx); self.compile_expr(&kw.value)?; if big { @@ -8755,7 +8720,7 @@ impl Compiler { } ExprKind::Attribute { value, attr } => { self.compile_expr(value)?; - let idx = self.co.intern_name(attr); + let idx = self.intern_name(attr); let saved_line = self.current_line; let saved = self.current_span; self.set_line_from(target.span.start.0); @@ -8809,7 +8774,7 @@ impl Compiler { self.emit(OpCode::DeleteDeref, idx); } Binding::Global | Binding::ClassPassthrough => { - let idx = self.co.intern_name(name); + let idx = self.intern_name(name); // GLOBAL_EXPLICIT: `global x` in a class body — or in any // scope nested under this module block — bypasses the // local namespace entirely. @@ -8849,7 +8814,7 @@ impl Compiler { self.emit(OpCode::StoreDeref, idx); } Binding::Global | Binding::ClassPassthrough => { - let idx = self.co.intern_name(name); + let idx = self.intern_name(name); // GLOBAL_EXPLICIT → STORE_GLOBAL: an explicit `global x` // in a class body bypasses the class namespace; at module // level, a `global x` declared in *any* nested scope makes @@ -8903,9 +8868,7 @@ impl Compiler { // `__debug__` is a compile-time constant in CPython: `True` // at optimize 0, `False` under `-O`/`-OO` (RFC 0052). if name == "__debug__" { - let idx = self - .co - .intern_constant(Constant::Bool(self.params.optimize == 0)); + let idx = self.intern_constant(Constant::Bool(self.params.optimize == 0)); self.emit(OpCode::LoadConst, idx); return; } @@ -8934,7 +8897,7 @@ impl Compiler { // it binds load from the class dict then *globals*, // never an enclosing function's cell. if ctx.globals.contains(name) { - let idx = self.co.intern_name(name); + let idx = self.intern_name(name); self.emit(OpCode::LoadGlobal, idx); } else if !ctx.assigned.contains(name) && matches!(binding, Some(Binding::Free | Binding::Nonlocal)) @@ -8946,7 +8909,7 @@ impl Compiler { } else { let dict_idx = self.cell_or_free_index("__classdict__"); self.emit(OpCode::LoadDeref, dict_idx); - let idx = self.co.intern_name(name); + let idx = self.intern_name(name); self.emit(OpCode::LoadClassdictOrGlobal, idx); } return; @@ -8964,14 +8927,14 @@ impl Compiler { // `inline_comprehension`: `__class__` free in a comprehension // inlined into a class body is demoted to `GLOBAL_IMPLICIT`. if self.inline_comp > 0 { - let idx = self.co.intern_name(name); + let idx = self.intern_name(name); self.emit(OpCode::LoadGlobal, idx); } else if let Some(pos) = self.free_order.iter().position(|n| n == "__class__") { let idx = (self.co.cellvars.len() + pos) as u32; self.emit(OpCode::LoadLocals, 0); self.emit(OpCode::LoadClassdictOrDeref, idx); } else { - let idx = self.co.intern_name(name); + let idx = self.intern_name(name); self.emit(OpCode::LoadName, idx); } return; @@ -8987,7 +8950,7 @@ impl Compiler { // `inline_comprehension`: the implicit class-scope names, // free in the comprehension, are demoted to `GLOBAL_IMPLICIT`. if CLASS_DUNDERS.contains(&name) { - let idx = self.co.intern_name(name); + let idx = self.intern_name(name); self.emit(OpCode::LoadGlobal, idx); return; } @@ -9016,7 +8979,7 @@ impl Compiler { self.emit(OpCode::LoadDeref, idx); } Some(Binding::Global | Binding::ClassPassthrough) | None => { - let idx = self.co.intern_name(name); + let idx = self.intern_name(name); self.emit(OpCode::LoadGlobal, idx); } } @@ -9046,7 +9009,7 @@ impl Compiler { } } Some(Binding::Global) | Some(Binding::ClassPassthrough) | None => { - let idx = self.co.intern_name(name); + let idx = self.intern_name(name); // GLOBAL_EXPLICIT: `global x` in a class body — or in any // scope nested under this module block — loads straight // from globals, skipping the local namespace. @@ -9079,7 +9042,7 @@ impl Compiler { fn compile_expr_inner(&mut self, e: &Expr) -> Result<(), CompileError> { match &e.kind { ExprKind::Constant(c) => { - let idx = self.co.intern_constant(c.clone().into()); + let idx = self.intern_constant(c.clone().into()); self.emit(OpCode::LoadConst, idx); } ExprKind::Name(n) => self.emit_load_name(n), @@ -9290,7 +9253,7 @@ impl Compiler { self.current_span = saved_span; } else { self.compile_expr(value)?; - let idx = self.co.intern_name(attr); + let idx = self.intern_name(attr); // The method load carries the *attribute expression's* // span (not the whole call's), exactly like a plain // `ExprKind::Attribute` visit. @@ -9377,7 +9340,7 @@ impl Compiler { names.push(Constant::Str(n)); self.compile_expr(&k.value)?; } - let tup_idx = self.co.intern_constant(Constant::Tuple(names)); + let tup_idx = self.intern_constant(Constant::Tuple(names)); if let Some((attr_end, attr_len)) = meth { // `maybe_optimize_method_call` threads the // method attribute's location (`LOC(meth)`, @@ -9410,7 +9373,7 @@ impl Compiler { self.emit_super_attr(e, false)?; } else { self.compile_expr(value)?; - let idx = self.co.intern_name(attr); + let idx = self.intern_name(attr); self.with_attr_location(e.span.end.0, attr.len() as u32, |c| { c.emit(OpCode::LoadAttr, idx); }); @@ -9439,7 +9402,7 @@ impl Compiler { if let Some(folded) = constant_slice(lower.as_deref(), upper.as_deref(), step.as_deref()) { - let idx = self.co.intern_constant(folded); + let idx = self.intern_constant(folded); self.emit(OpCode::LoadConst, idx); } else { self.compile_slice_two_parts(e)?; @@ -9551,7 +9514,7 @@ impl Compiler { if let Some(v) = value { self.compile_expr(v)?; } else { - let idx = self.co.intern_constant(Constant::None); + let idx = self.intern_constant(Constant::None); self.emit(OpCode::LoadConst, idx); } // CPython 3.13 own-yield shape. An async generator's *own* @@ -9658,7 +9621,7 @@ impl Compiler { /// block to the stream tail with an explicit rejoin jump, exactly /// like CPython's `push_cold_blocks_to_end`. fn emit_send_dance(&mut self, resume_arg: u32) { - let none_idx = self.co.intern_constant(Constant::None); + let none_idx = self.intern_constant(Constant::None); self.emit(OpCode::LoadConst, none_idx); let loop_start = self.use_label(); let send = self.emit(OpCode::Send, 0); @@ -9992,7 +9955,7 @@ impl Compiler { /// machinery. fn compile_joined_str(&mut self, parts: &[Expr]) -> Result<(), CompileError> { if parts.is_empty() { - let idx = self.co.intern_constant(Constant::Str(String::new())); + let idx = self.intern_constant(Constant::Str(String::new())); self.emit(OpCode::LoadConst, idx); return Ok(()); } @@ -10004,9 +9967,9 @@ impl Compiler { // `''.join([p0, p1, ...])` so the operand stack stays shallow. // Every synthesized instruction carries the f-string's own // location. - let empty = self.co.intern_constant(Constant::Str(String::new())); + let empty = self.intern_constant(Constant::Str(String::new())); self.emit(OpCode::LoadConst, empty); - let join = self.co.intern_name("join"); + let join = self.intern_name("join"); self.emit(OpCode::LoadMethodAttr, join); self.emit(OpCode::BuildList, 0); for p in parts { @@ -10077,7 +10040,7 @@ impl Compiler { } strings.push(cps_to_const(cur)); for s in strings.iter().cloned() { - let idx = self.co.intern_constant(s); + let idx = self.intern_constant(s); self.emit(OpCode::LoadConst, idx); } self.emit(OpCode::BuildTuple, strings.len() as u32); @@ -10100,7 +10063,7 @@ impl Compiler { self.compile_expr(value)?; self.set_line_from(p.span.start.0); self.set_span(p.span); - let idx = self.co.intern_constant(Constant::Str(text.clone())); + let idx = self.intern_constant(Constant::Str(text.clone())); self.emit(OpCode::LoadConst, idx); let conv: u32 = match *conversion { -1 => 0, @@ -11251,7 +11214,7 @@ impl Compiler { // iterator's for a `for` (END_FOR/POP_ITER), the whole // expression's for an `async for` (END_ASYNC_FOR carries // `LOC(e)`; test_multiline_async_generator_expression). - let none_idx = inner.co.intern_constant(Constant::None); + let none_idx = inner.intern_constant(Constant::None); inner.emit_no_line(OpCode::LoadConst, none_idx); inner.emit_no_line(OpCode::ReturnValue, 0); } else { @@ -11284,9 +11247,7 @@ impl Compiler { self.emit(OpCode::BuildTuple, inner_freevars.len() as u32); flags |= 0x08; } - let code_idx = self - .co - .intern_constant(Constant::Code(std::sync::Arc::new(inner_code))); + let code_idx = self.intern_constant(Constant::Code(std::sync::Arc::new(inner_code))); self.emit(OpCode::LoadConst, code_idx); self.emit_make_function(flags); // Push the outermost generator's iterator as `.0`: CPython diff --git a/crates/weavepy-vm/src/builtins.rs b/crates/weavepy-vm/src/builtins.rs index 25353ca8..4dfc3c0a 100644 --- a/crates/weavepy-vm/src/builtins.rs +++ b/crates/weavepy-vm/src/builtins.rs @@ -10602,31 +10602,24 @@ fn str_split_whitespace(s: &str, maxsplit: i64) -> Vec { return s .split(is_space) .filter(|f| !f.is_empty()) - .map(Object::from_str) + .map(|s| Object::Str(Rc::from(s))) .collect(); } - let chars: Vec<(usize, char)> = s.char_indices().collect(); - let n = chars.len(); let mut out = Vec::new(); - let mut i = 0; + let mut rest = s; let mut splits = 0; - while i < n { - while i < n && is_space(chars[i].1) { - i += 1; - } - if i >= n { + loop { + rest = rest.trim_start_matches(is_space); + if rest.is_empty() { break; } if splits >= maxsplit { - out.push(Object::from_str(s[chars[i].0..].to_string())); - return out; - } - let start = chars[i].0; - while i < n && !is_space(chars[i].1) { - i += 1; + out.push(Object::Str(Rc::from(rest))); + break; } - let end = if i < n { chars[i].0 } else { s.len() }; - out.push(Object::from_str(s[start..end].to_string())); + let end = rest.find(is_space).unwrap_or(rest.len()); + out.push(Object::Str(Rc::from(&rest[..end]))); + rest = &rest[end..]; splits += 1; } out @@ -10661,10 +10654,10 @@ fn str_split(args: &[Object], kwargs: &[(String, Object)]) -> Result Result Result { - let sep = str_self(args)?.into_owned(); + use std::borrow::Cow; + + let sep = str_self(args)?; if args.len() != 2 { return Err(type_error("join() expected 1 argument")); } + // Exact built-in sequences of exact strings need no iteration hooks, + // reference clones, or intermediate copies. Hold a list's read guard + // across both passes so concurrent mutation cannot change its size. + if matches!(args.first(), Some(Object::Str(_))) { + let joined = match &args[1] { + Object::List(items) => join_exact_strings(&items.borrow(), &sep), + Object::Tuple(items) => join_exact_strings(items, &sep), + _ => None, + }; + if let Some(joined) = joined { + return Ok(joined); + } + } let mut it = args[1].make_iter()?; let mut items = Vec::new(); while let Some(v) = it.next_value() { @@ -10688,23 +10696,23 @@ fn str_join(args: &[Object]) -> Result { if items.len() == 1 && matches!(&items[0], Object::Str(_) | Object::WStr(_)) { return Ok(items[0].clone()); } - let mut parts = Vec::new(); + let mut parts: Vec> = Vec::with_capacity(items.len()); let mut saw_surrogate = matches!(args.first(), Some(Object::WStr(_))); for v in &items { match v { - Object::Str(s) => parts.push(s.to_string()), + Object::Str(s) => parts.push(Cow::Borrowed(s)), Object::WStr(cps) => { saw_surrogate = true; - parts.push(bridge_encode_cps(cps)); + parts.push(Cow::Owned(bridge_encode_cps(cps))); } // Accept `str` subclass instances (e.g. email's `ValueTerminal`): // CPython's `str.join` treats any `PyUnicode` — subclasses // included — as a string item. Unwrap the native payload. other => match other.native_value() { - Some(Object::Str(s)) => parts.push(s.to_string()), + Some(Object::Str(s)) => parts.push(Cow::Owned(s.to_string())), Some(Object::WStr(cps)) => { saw_surrogate = true; - parts.push(bridge_encode_cps(&cps)); + parts.push(Cow::Owned(bridge_encode_cps(&cps))); } _ => { return Err(type_error(format!( @@ -10723,6 +10731,30 @@ fn str_join(args: &[Object]) -> Result { }) } +/// Return `None` for shapes that need the general Unicode/iterator path. +fn join_exact_strings(items: &[Object], sep: &str) -> Option { + let mut size = sep.len().checked_mul(items.len().saturating_sub(1))?; + for item in items { + let Object::Str(s) = item else { + return None; + }; + size = size.checked_add(s.len())?; + } + if items.len() == 1 { + return Some(items[0].clone()); + } + let mut joined = String::with_capacity(size); + for (i, item) in items.iter().enumerate() { + if i != 0 { + joined.push_str(sep); + } + if let Object::Str(s) = item { + joined.push_str(s); + } + } + Some(Object::from_str(joined)) +} + fn str_startswith(args: &[Object]) -> Result { str_arity("startswith", args, 1, 3)?; let s = str_self(args)?; diff --git a/crates/weavepy-vm/src/sync.rs b/crates/weavepy-vm/src/sync.rs index 9f30d7a1..8835997e 100644 --- a/crates/weavepy-vm/src/sync.rs +++ b/crates/weavepy-vm/src/sync.rs @@ -439,12 +439,15 @@ impl GilCell { /// reentrant lock let us in), unwind, release, and report failure. #[inline] fn borrow_shared(&self) -> bool { - let prev = self.borrow.fetch_add(1, Ordering::Acquire); - if prev < 0 { - self.borrow.fetch_sub(1, Ordering::Release); + // The owner lock already serializes access across threads. The + // counter only checks same-thread reentry, so it needs no atomic + // read-modify-write or second acquire/release barrier. + let prev = self.borrow.load(Ordering::Relaxed); + if prev < 0 || prev == isize::MAX { self.lock_release(); return false; } + self.borrow.store(prev + 1, Ordering::Relaxed); true } @@ -453,14 +456,11 @@ impl GilCell { /// mutable borrow); releases the lock and reports failure otherwise. #[inline] fn borrow_exclusive(&self) -> bool { - if self - .borrow - .compare_exchange(0, -1, Ordering::Acquire, Ordering::Acquire) - .is_err() - { + if self.borrow.load(Ordering::Relaxed) != 0 { self.lock_release(); return false; } + self.borrow.store(-1, Ordering::Relaxed); true } @@ -691,7 +691,8 @@ impl fmt::Display for Ref<'_, T> { impl Drop for Ref<'_, T> { fn drop(&mut self) { - self.cell.borrow.fetch_sub(1, Ordering::Release); + let count = self.cell.borrow.load(Ordering::Relaxed); + self.cell.borrow.store(count - 1, Ordering::Relaxed); self.cell.lock_release(); note_cell_guard_released(); } @@ -729,7 +730,7 @@ impl Drop for RefMut<'_, T> { fn drop(&mut self) { // From -1 back to 0 — there's only ever one outstanding // mutable borrow at a time. - self.cell.borrow.store(0, Ordering::Release); + self.cell.borrow.store(0, Ordering::Relaxed); self.cell.lock_release(); note_cell_guard_released(); } @@ -1455,6 +1456,38 @@ mod tests { assert_eq!(*shared.borrow(), vec![0, 1, 2, 3, 4]); } + #[test] + fn gilcell_contended_borrows_publish_consistent_state() { + let shared = Rc::new(GilCell::new((0_u64, 0_u64))); + let start = Arc::new(std::sync::Barrier::new(8)); + let workers: Vec<_> = (0..8) + .map(|_| { + let shared = shared.clone(); + let start = start.clone(); + thread::spawn(move || { + start.wait(); + for _ in 0..2_000 { + { + let a = shared.borrow(); + let b = shared.borrow(); + assert_eq!(a.0, b.1); + assert!(shared.try_borrow_mut().is_err()); + } + let mut pair = shared.borrow_mut(); + assert!(shared.try_borrow().is_err()); + assert!(shared.try_borrow_mut().is_err()); + pair.0 += 1; + pair.1 += 1; + } + }) + }) + .collect(); + for worker in workers { + worker.join().unwrap(); + } + assert_eq!(*shared.borrow(), (16_000, 16_000)); + } + #[test] fn gilcell_clone_deep_copies() { let a = GilCell::new(vec![1, 2, 3]); diff --git a/crates/weavepy-vm/src/unicode_case.rs b/crates/weavepy-vm/src/unicode_case.rs index 9bba52bc..bc01b413 100644 --- a/crates/weavepy-vm/src/unicode_case.rs +++ b/crates/weavepy-vm/src/unicode_case.rs @@ -60,6 +60,9 @@ fn lower_at(cps: &[char], i: usize) -> ucd::CaseMap { } pub fn lower(s: &str) -> String { + if s.is_ascii() { + return s.to_ascii_lowercase(); + } let cps: Vec = s.chars().collect(); let mut out = String::with_capacity(s.len()); for i in 0..cps.len() { @@ -69,6 +72,9 @@ pub fn lower(s: &str) -> String { } pub fn upper(s: &str) -> String { + if s.is_ascii() { + return s.to_ascii_uppercase(); + } let mut out = String::with_capacity(s.len()); for c in s.chars() { push_cps(&mut out, ucd::to_upper_full(c as u32)); @@ -78,6 +84,9 @@ pub fn upper(s: &str) -> String { /// `str.casefold()` — context-free full fold (no Final_Sigma). pub fn casefold(s: &str) -> String { + if s.is_ascii() { + return s.to_ascii_lowercase(); + } let mut out = String::with_capacity(s.len()); for c in s.chars() { push_cps(&mut out, ucd::to_fold_full(c as u32)); @@ -86,6 +95,18 @@ pub fn casefold(s: &str) -> String { } pub fn title(s: &str) -> String { + if s.is_ascii() { + let mut previous_is_cased = false; + return ascii_case_map(s, |b| { + let mapped = if previous_is_cased { + b.to_ascii_lowercase() + } else { + b.to_ascii_uppercase() + }; + previous_is_cased = b.is_ascii_alphabetic(); + mapped + }); + } let cps: Vec = s.chars().collect(); let mut out = String::with_capacity(s.len()); let mut previous_is_cased = false; @@ -103,6 +124,13 @@ pub fn title(s: &str) -> String { /// `str.capitalize()` — first char titlecased (3.8+ semantics), rest /// lowered with the sigma rule. pub fn capitalize(s: &str) -> String { + if s.is_ascii() { + let mut out = s.to_ascii_lowercase(); + if let Some(first) = out.get_mut(..1) { + first.make_ascii_uppercase(); + } + return out; + } let cps: Vec = s.chars().collect(); let mut out = String::with_capacity(s.len()); if let Some(&first) = cps.first() { @@ -115,6 +143,15 @@ pub fn capitalize(s: &str) -> String { } pub fn swapcase(s: &str) -> String { + if s.is_ascii() { + return ascii_case_map(s, |b| { + if b.is_ascii_lowercase() { + b.to_ascii_uppercase() + } else { + b.to_ascii_lowercase() + } + }); + } let cps: Vec = s.chars().collect(); let mut out = String::with_capacity(s.len()); for i in 0..cps.len() { @@ -131,9 +168,18 @@ pub fn swapcase(s: &str) -> String { out } +/// ASCII case mappings preserve both length and UTF-8 validity. Keep this +/// safe even if a future caller passes a non-ASCII byte through the mapper. +fn ascii_case_map(s: &str, map: impl FnMut(u8) -> u8) -> String { + String::from_utf8(s.bytes().map(map).collect()).expect("ASCII case mapping") +} + /// `Py_UNICODE_ISSPACE` — differs from Rust's `char::is_whitespace` (e.g. /// U+001C..U+001F are Python whitespace). pub fn is_space(c: char) -> bool { + if c.is_ascii() { + return matches!(c, '\t'..='\r' | '\x1c'..=' '); + } ucd::case_flags(c as u32) & ucd::FLAG_SPACE != 0 } diff --git a/docs/PERFORMANCE-EXECUTION.md b/docs/PERFORMANCE-EXECUTION.md new file mode 100644 index 00000000..e75d1646 --- /dev/null +++ b/docs/PERFORMANCE-EXECUTION.md @@ -0,0 +1,216 @@ +# Execution and compilation performance + +The September 8, 2026, execution pass reduces compilation time by 89% to 95% +for the measured large generated modules and reduces the standard string +benchmark's execution time by 45% with the JIT and 48% without it. Across all +23 timed execution fixtures, the geometric mean of paired elapsed-time ratios +improves by 3.2% with the JIT and 2.8% in interpreter mode. + +Large joins and bounded whitespace splitting also avoid substantial temporary +storage. The bounded-split probe's peak RSS falls from 217.6 MiB to 32.6 MiB. +General process memory and warm-cache startup are essentially unchanged. +Large-source compilation trades about 3% more peak memory for its speedup; +thread scaling shows no reliable gain. These are measurements on one macOS +ARM64 host, not a claim that every workload or metric improves. + +The baseline is an unmodified release build of `971d752`, which already +includes the [startup and memory optimizations](PERFORMANCE.md). Both binaries +use Rust 1.98.1, the same release profile, and the default JIT feature. CPython +3.14.7 is the reference interpreter. +[Raw samples, checksums, environment, probes, and validation](../crates/weavepy-bench/census/2026-09-execution/) +are retained. No existing benchmark fixture, work parameter, expectation, or +regression threshold was removed or relaxed. + +The implementation changes are: + +- Index compiler names and constants once a pool reaches 32 entries. Small + pools retain an allocation-free linear search. The temporary indexes hold + slot numbers, resolve hash collisions with the existing equality rules, and + preserve the first matching slot. Signed zero, NaN, nested code constants, + and unordered frozen-set constants keep their existing semantics. The + flowgraph optimizer resets its index when it compacts the constant pool. + Indexes belong to compilation and aren't stored in runtime code objects. +- Use ASCII operations for case conversion and whitespace classification, + retaining the existing Unicode tables and contextual sigma handling for + non-ASCII input. +- Split directly into reference-counted strings. Bounded whitespace + splitting scans only the required words instead of allocating an index of + every character in the input. +- Join exact built-in lists and tuples of strings with one sizing pass and + one output-building pass. This avoids the intermediate iterator, object + clones, and copies of individual strings. The general iterator, subclass, + and surrogate paths remain available, and single-item identity is preserved. +- Replace redundant atomic read-modify-write operations on the internal + borrow counter with relaxed loads and stores while the owner lock is held. + The owner's acquire/release operations still synchronize threads; reentrant + borrow checks remain active. A contended eight-thread Rust regression + checks shared reads, rejected nested borrows, and publication of mutations. + +The main suite runs all 24 existing fixtures, with five measured cycles after +one discarded cycle. Each cycle interleaves the baseline, modified binary, +both interpreter-only variants, and CPython; order reverses on alternate +cycles. Workload timers exclude startup except for the `startup` fixture. +CPU time and peak RSS include initialization. + +Every relative result is the median of `modified / baseline` within matched +cycles. Values below 1.000 improve the metric. Geometric means give each +fixture equal weight; the execution aggregate excludes startup but includes +the deque, datetime, and pickle census fixtures. + +| Aggregate | JIT | Interpreter | +| --- | ---: | ---: | +| Timed execution, 23 fixtures | 0.968 | 0.972 | +| Process elapsed time, 24 fixtures | 0.977 | 0.979 | +| Process CPU time, 24 fixtures | 0.975 | 0.977 | +| Peak RSS, 24 fixtures | 1.000 | 0.997 | + +| Fixture | JIT time | Interpreter time | JIT RSS | Interpreter RSS | +| --- | ---: | ---: | ---: | ---: | +| `fannkuch` | 1.018 | 0.987 | 0.998 | 0.993 | +| `nbody` | 1.037 | 1.004 | 1.000 | 0.997 | +| `fib` | 0.987 | 0.969 | 1.001 | 0.996 | +| `pidigits` | 1.030 | 1.007 | 0.992 | 0.991 | +| `pyaes` | 1.012 | 0.994 | 1.000 | 0.994 | +| `richards` | 0.980 | 0.945 | 1.002 | 0.997 | +| `sumvm` | 1.001 | 0.977 | 1.003 | 0.997 | +| `nested_loops` | 0.957 | 0.998 | 0.999 | 0.999 | +| `jitloop` | 1.036 | 0.984 | 1.004 | 0.995 | +| `jitkernels` | 0.946 | 1.006 | 0.999 | 0.996 | +| `deltablue` | 0.877 | 1.057 | 0.997 | 0.996 | +| `float_math` | 1.033 | 1.046 | 1.001 | 1.000 | +| `spectral_norm` | 1.015 | 0.982 | 1.002 | 0.996 | +| `json_bench` | 1.021 | 1.031 | 0.995 | 0.999 | +| `str_methods` | 0.547 | 0.525 | 1.000 | 0.992 | +| `dict_ops` | 1.006 | 0.994 | 0.997 | 0.996 | +| `list_ops` | 0.998 | 1.003 | 0.994 | 0.993 | +| `attr_access` | 1.014 | 1.010 | 1.001 | 0.998 | +| `call_overhead` | 0.954 | 1.057 | 0.997 | 0.995 | +| `generators` | 0.996 | 0.973 | 0.999 | 0.996 | +| `deque_ops` | 0.946 | 0.993 | 0.999 | 1.000 | +| `datetime_ops` | 1.019 | 0.996 | 1.002 | 1.003 | +| `pickle_bench` | 0.996 | 0.996 | 1.003 | 1.001 | +| `startup` | 1.000 | 0.988 | 1.001 | 0.998 | + +The largest elapsed-time increase in this run is 5.7% on interpreter-mode +`call_overhead`. Host speed varied substantially, especially during +`deltablue`: individual timings for the same binary differed by more than a +factor of two. Pairing reduces drift artifacts but doesn't eliminate changes +between adjacent processes. Small differences aren't strong evidence of a +speedup or slowdown. The large string improvement is consistent across the +original and warm measurements. + +The follow-up uses seven measured cycles. Each subprocess invokes `bench(n)` +once before timing a second invocation at the original work size. It also +measures CPU time within that second invocation. These results don't reproduce +the original 4% to 6% elapsed-time slowdowns in calls and object workloads. +The 1.9% workload-CPU increase for interpreter-mode `float_math` remains in the +data; uniform throughput improvement isn't established. + +| Warm fixture | JIT wall | JIT CPU | Interpreter wall | Interpreter CPU | +| --- | ---: | ---: | ---: | ---: | +| `deltablue` | 0.991 | 0.991 | 0.990 | 0.990 | +| `call_overhead` | 0.996 | 0.996 | 1.001 | 1.001 | +| `float_math` | 0.965 | 0.969 | 0.996 | 1.019 | +| `nbody` | 1.001 | 1.001 | 0.994 | 0.994 | +| `json_bench` | 1.005 | 1.005 | 1.002 | 1.002 | +| `str_methods` | 0.502 | 0.502 | 0.522 | 0.522 | + +Supplemental probes run in interpreter mode with seven measured cycles after +one discarded cycle. Startup and import probes use 31 measured cycles instead. +The fresh-cache probe uses seven measured cycles with a new +`WEAVEPY_STDLIB_CACHE` directory for every process, including extraction of the +embedded library. It doesn't flush the operating system's file cache. + +The small compilation probe compiles a class/comprehension source 1,500 times. +The larger probes compile 6,000 assignments three times or 20,000 assignments +once. The join probe performs ten joins of 100,000 64-character strings. +Bounded splitting performs ten `split(None, 1)` calls over a long Unicode +string. Case probes apply `lower`, `upper`, and `title` to large ASCII or +Unicode inputs. Exact sources and parameters are in `probes.py`. + +Times below are marginal medians; relative ratios remain paired estimates, so +they needn't equal the quotient of the displayed medians. Peak RSS includes +setup and startup. + +| Probe | Baseline ms | Modified ms | Time ratio | Baseline MiB | Modified MiB | RSS ratio | +| --- | ---: | ---: | ---: | ---: | ---: | ---: | +| `startup` | 42.13 | 41.86 | 0.989 | 27.89 | 27.75 | 0.996 | +| `startup_no_site` | 13.21 | 13.17 | 1.010 | 18.64 | 18.48 | 0.993 | +| `imports` | 104.48 | 103.14 | 0.993 | 42.00 | 41.89 | 0.997 | +| `compile_small` | 102.98 | 102.44 | 1.000 | 28.22 | 28.20 | 0.997 | +| `compile_6000` | 301.18 | 33.28 | 0.110 | 46.47 | 46.62 | 1.005 | +| `compile_20000` | 927.32 | 50.04 | 0.053 | 78.41 | 80.75 | 1.030 | +| `join_large` | 66.45 | 10.60 | 0.155 | 61.41 | 49.03 | 0.798 | +| `split_bounded` | 30.36 | 0.50 | 0.017 | 217.59 | 32.59 | 0.150 | +| `case_ascii` | 241.42 | 16.09 | 0.067 | 50.23 | 48.23 | 0.960 | +| `case_unicode` | 17.25 | 17.37 | 1.001 | 34.33 | 34.19 | 0.996 | +| `startup_fresh_cache` | 162.06 | 188.49 | 1.038 | 39.44 | 39.33 | 0.997 | + +Fresh-cache startup is 3.8% slower in this small-sample run. The warm-cache +startup and import probes are within about 1% of baseline, and small-source +compilation and non-ASCII case conversion are essentially unchanged. The +largest compiler probe uses about 2.3 MiB more peak memory because the new +indexes trade temporary storage for faster lookups. + +The existing eight-thread fixture runs at both 1,000,000 and 3,000,000 work +units per worker, with five measured cycles at each size and both GIL modes. +No thread-scaling improvement is claimed. The free-threaded parallel-time +increase shrinks from 5.6% to 1.8% at the larger size, while the GIL-enabled +parallel-time increase grows from 0.2% to 7.3%. Absolute timings also varied +substantially between the runs. These observations don't establish a reliable +change in scaling, and the slower samples aren't discarded. + +| Work per worker | GIL | Serial time ratio | Parallel time ratio | Baseline scaling | Modified scaling | +| --- | ---: | ---: | ---: | ---: | ---: | +| 1,000,000 | 1 | 1.014 | 1.002 | 0.93 | 0.94 | +| 1,000,000 | 0 | 1.013 | 1.056 | 4.15 | 4.12 | +| 3,000,000 | 1 | 1.025 | 1.073 | 0.87 | 0.85 | +| 3,000,000 | 0 | 1.004 | 1.018 | 3.93 | 3.83 | + +Executable size is essentially unchanged: 44,120,992 bytes before and +44,121,520 bytes after, an increase of 528 bytes. Rust build time, +energy consumption, allocation counts, tail latency under load, and other +hardware platforms weren't measured under controlled conditions. + +Validation passes 260 VM unit tests, 25 compiler unit tests, four benchmark +reporting tests, the full run-fixture integration harness, stdlib synchronization, +Clippy with all features and warnings denied, formatting, and the build check +without the JIT. The integration harness uses a real release executable for +subprocess tests and requires localhost socket access. + +Both new Python regressions pass on CPython and the final release with the JIT +enabled, disabled, and under `-X gil=0`. The existing free-threading contract +suite passes all 13 tests, and the cross-thread heap regression passes under +`gil=0`. + +Twelve targeted CPython suites pass: `test_str`, `test_string`, `test_compile`, +`test_code`, `test_dis`, `test_peepholer`, `test_builtin`, `test_list`, `test_dict`, +`test_gc`, `test_threading`, and `test_threading_local`. `test_marshal` matches +its four preexisting, enumerated divergences, also confirmed on the baseline. +All thirteen gates report zero unexpected results. This is targeted validation, +not a complete rerun of the vendored CPython suite. + +To reproduce from the repository root, retain a baseline release executable, +build the modified CLI, and run the following commands while the host is idle: + +```sh +cargo build --release -p weavepy-cli --bin weavepy +python3.14 tools/bench_compare.py \ + --base target/release/weavepy-perf-971d752 --new target/release/weavepy \ + --samples 5 --out target/execution-suite.json +python3.14 crates/weavepy-bench/census/2026-09-execution/probes.py \ + --base target/release/weavepy-perf-971d752 --new target/release/weavepy \ + --out target/execution-probes.json +python3.14 tools/bench_compare.py \ + --base target/release/weavepy-perf-971d752 --new target/release/weavepy \ + --warm --samples 7 \ + --fixtures deltablue call_overhead float_math nbody json_bench str_methods \ + --out target/execution-warm.json +python3.14 crates/weavepy-bench/census/2026-09-execution/scaling.py \ + --base target/release/weavepy-perf-971d752 --new target/release/weavepy \ + --work 3000000 --samples 5 --out target/execution-scaling.json +``` + +Use `--work 1000000` to reproduce the smaller scaling run. The saved probe +results separate fresh-cache startup into `fresh-cache.json`; `probes.py` now +includes it by default. Finish compilation and correctness tests before timing. diff --git a/docs/PERFORMANCE.md b/docs/PERFORMANCE.md index 26333217..fd99bd89 100644 --- a/docs/PERFORMANCE.md +++ b/docs/PERFORMANCE.md @@ -1,5 +1,8 @@ # Performance measurements +For the subsequent compiler and string optimizations measured against this +release, see [Execution and compilation performance](PERFORMANCE-EXECUTION.md). + The September 8, 2026, optimization pass reduces warm-cache process startup from 50.7 ms to 32.3 ms on the measured macOS ARM64 host. Across all 24 existing benchmark fixtures, peak resident memory falls by 22.2% with the JIT and 23.4% diff --git a/tests/regrtest/test_indexed_compilation.py b/tests/regrtest/test_indexed_compilation.py new file mode 100644 index 00000000..39a1dd31 --- /dev/null +++ b/tests/regrtest/test_indexed_compilation.py @@ -0,0 +1,25 @@ +"""Large compiler pools preserve bindings, constant types, and signed zero.""" + +import math + +source = "\n".join("name_%d = %d" % (i, i) for i in range(512)) +source += "\nresult = [" + ",".join("name_%d" % i for i in range(512)) + "]\n" +source += "values = (0, 0.0, -0.0, False, True, 1, 1.0, b'x', 'x')\n" +source += "\n".join("def f%d(): return name_%d" % (i, i) for i in range(80)) +namespace = {} +exec(compile(source, "", "exec"), namespace) +assert namespace["result"] == list(range(512)) +values = namespace["values"] +assert tuple(type(value) for value in values) == ( + int, float, float, bool, bool, int, float, bytes, str, +) +assert math.copysign(1, values[1]) == 1 +assert math.copysign(1, values[2]) == -1 +for i in range(80): + function = namespace["f%d" % i] + assert function() == i + assert function.__name__ == "f%d" % i + +# Names and constants remain reusable after a pool crosses its index threshold. +for name in ("name_0", "name_31", "name_32", "name_511"): + assert namespace[name] == int(name[5:]) diff --git a/tests/regrtest/test_string_fastpaths.py b/tests/regrtest/test_string_fastpaths.py new file mode 100644 index 00000000..42194711 --- /dev/null +++ b/tests/regrtest/test_string_fastpaths.py @@ -0,0 +1,75 @@ +"""String allocation fast paths must preserve Unicode and iterable behavior.""" + +import unittest + + +class StringFastPaths(unittest.TestCase): + def test_ascii_case_boundaries(self): + self.assertEqual("it's a TEST_123word".title(), "It'S A Test_123Word") + self.assertEqual("123ABC".capitalize(), "123abc") + self.assertEqual("aZ\x00_9!".swapcase(), "Az\x00_9!") + for method in ("upper", "lower", "title", "capitalize", "casefold", "swapcase"): + self.assertEqual(getattr("", method)(), "") + ascii_text = "".join(chr(i) for i in range(128)) + self.assertEqual(ascii_text.lower(), ascii_text.casefold()) + self.assertEqual(ascii_text.upper().lower(), ascii_text.lower()) + self.assertEqual(ascii_text.swapcase().swapcase(), ascii_text) + + def test_unicode_fallback(self): + self.assertEqual("Straße".upper(), "STRASSE") + self.assertEqual("Straße".casefold(), "strasse") + self.assertEqual("ΟΣ ΟΣΑ".lower(), "ος οσα") + self.assertEqual("aΣ\u0301".lower(), "aς\u0301") + self.assertEqual("dzABC".capitalize(), "Dzabc") + self.assertEqual("\ud800ABC".lower(), "\ud800abc") + + def test_join_shapes_and_identity(self): + text = "a long string that isn't interned " * 5 + for factory in (list, tuple, iter): + self.assertIs("different separator".join(factory([text])), text) + self.assertEqual("|".join(factory([])), "") + self.assertEqual("雪".join(factory(["a", "", "é"])), "a雪雪é") + self.assertEqual("\ud800".join(["a", "b"]), "a\ud800b") + self.assertEqual("|".join(["a", "\ud800"]), "a|\ud800") + + def test_join_subclasses_and_iteration(self): + class Text(str): + def __str__(self): + raise AssertionError("join must use the native string value") + + class Items(list): + def __iter__(self): + return iter(["override", "values"]) + + self.assertEqual("|".join([Text("a"), Text("b")]), "a|b") + self.assertIs(type("|".join([Text("a")])), str) + self.assertEqual("|".join(Items(["ignored"])), "override|values") + events = [] + + def values(): + events.append(1) + yield "a" + yield 42 + events.append(2) + yield "b" + + with self.assertRaises(TypeError): + "|".join(values()) + self.assertEqual(events, [1, 2]) + + def test_bounded_whitespace_split(self): + for whitespace in (" ", "\t", "\n", "\x1c", "\x1f", "\u0085", "\u2003"): + text = whitespace + "a" + whitespace + "β" + whitespace + self.assertEqual(text.split(), ["a", "β"]) + self.assertEqual(text.split(None, 0), ["a" + whitespace + "β" + whitespace]) + self.assertEqual(text.split(None, 1), ["a", "β" + whitespace]) + self.assertEqual(text.split(None, 2), ["a", "β"]) + self.assertEqual(whitespace.split(None, 0), []) + self.assertEqual(" a\ud800 b ".split(None, 1), ["a\ud800", "b "]) + self.assertEqual(" a ".split(maxsplit=1), ["a"]) + self.assertEqual("".split(None, 0), []) + self.assertEqual("a,,b,".split(",", 2), ["a", "", "b,"]) + + +if __name__ == "__main__": + unittest.main() From 1b57b4962e094893123c2f52a6c43caca3e8763c Mon Sep 17 00:00:00 2001 From: Owen Carey <37121709+owenthcarey@users.noreply.github.com> Date: Tue, 8 Sep 2026 23:33:58 -0700 Subject: [PATCH 2/2] fix: prevent stack overflows in C execution entry points --- crates/weavepy-capi/src/pythonrun.rs | 55 +++++++++++++------- crates/weavepy-capi/tests/embed_lifecycle.rs | 55 +++++++++++++++++++- 2 files changed, 89 insertions(+), 21 deletions(-) diff --git a/crates/weavepy-capi/src/pythonrun.rs b/crates/weavepy-capi/src/pythonrun.rs index 60781224..ecd90c2b 100644 --- a/crates/weavepy-capi/src/pythonrun.rs +++ b/crates/weavepy-capi/src/pythonrun.rs @@ -38,6 +38,22 @@ pub struct PyCompilerFlags { // Shared plumbing // --------------------------------------------------------------------------- +/// Compilation and exception reporting can consume native stack before +/// execution reaches the VM's per-frame growth check. C embedders may call +/// us on a small OS thread stack, so reserve headroom for the whole run. +fn with_run_stack(body: impl FnOnce() -> R) -> R { + // A greenlet may suspend and destroy its stack out of band. Match the + // VM's policy: its dedicated stack must not acquire stacker segments. + if weavepy_vm::stdlib::greenlet_native::on_greenlet_stack() { + return body(); + } + stacker::maybe_grow(8 * 1024 * 1024, 64 * 1024 * 1024, body) +} + +fn with_run_interp(body: impl FnOnce(&mut Interpreter) -> R) -> Option { + with_run_stack(|| crate::interp::with_interp_mut(body)) +} + /// The `__main__` module's dict, creating the module (CPython's /// `PyImport_AddModule("__main__")`) if this is the first touch. pub fn main_module_dict(interp: &mut Interpreter) -> Result>, RuntimeError> { @@ -212,8 +228,8 @@ fn run_in_embed_subinterp(id: i64, source: &str) -> Option { match crate::embed::owned_interpreter() { // SAFETY: live between `Py_Initialize*` and `Py_FinalizeEx`; // the GIL keeps the access exclusive. - Some(p) => Some(f(unsafe { &mut *p })), - None => crate::interp::with_interp_mut(f), + Some(p) => Some(with_run_stack(|| f(unsafe { &mut *p }))), + None => with_run_interp(f), } } let module = with_host(|interp| interp.import_path("_xxsubinterpreters"))?; @@ -256,15 +272,16 @@ pub unsafe extern "C" fn PyRun_SimpleStringFlags( return rc; } } - let outcome = crate::interp::with_interp_mut(|interp| { - match crate::embed::exec_in_main(interp, &source, None) { - Ok(_) => 0, - Err(err) => { - print_or_exit(interp, err); - -1 - } - } - }); + let outcome = + with_run_interp( + |interp| match crate::embed::exec_in_main(interp, &source, None) { + Ok(_) => 0, + Err(err) => { + print_or_exit(interp, err); + -1 + } + }, + ); outcome.unwrap_or_else(|| { crate::errors::set_runtime_error( "PyRun_SimpleString: interpreter not initialized".to_owned(), @@ -310,7 +327,7 @@ unsafe fn run_string_impl( }; let filename = filename.to_owned(); let source = source.to_owned(); - let result = crate::interp::with_interp_mut(move |interp| { + let result = with_run_interp(move |interp| { let code = compile_source(interp, &source, &filename, mode, flags, -1)?; eval_code_object(interp, code, globals_obj, locals_obj) }); @@ -385,9 +402,8 @@ pub unsafe extern "C" fn Py_CompileStringExFlags( } else { unsafe { (*flags).cf_flags } }; - let result = crate::interp::with_interp_mut(|interp| { - compile_source(interp, &source, &filename, mode, cf, optimize) - }); + let result = + with_run_interp(|interp| compile_source(interp, &source, &filename, mode, cf, optimize)); match result { Some(Ok(code)) => crate::object::into_owned(code), Some(Err(err)) => { @@ -443,9 +459,8 @@ pub unsafe extern "C" fn PyEval_EvalCode( } else { unsafe { crate::object::clone_object(locals) } }; - let result = crate::interp::with_interp_mut(|interp| { - eval_code_object(interp, code_obj, globals_obj, locals_obj) - }); + let result = + with_run_interp(|interp| eval_code_object(interp, code_obj, globals_obj, locals_obj)); match result { Some(Ok(obj)) => crate::object::into_owned(obj), Some(Err(err)) => { @@ -572,7 +587,7 @@ pub unsafe extern "C" fn PyRun_SimpleFileExFlags( .to_string_lossy() .into_owned() }; - let outcome = crate::interp::with_interp_mut(|interp| { + let outcome = with_run_interp(|interp| { match crate::embed::exec_in_main(interp, &source, Some(&filename)) { Ok(_) => 0, Err(err) => { @@ -698,7 +713,7 @@ pub unsafe extern "C" fn PyRun_InteractiveOneFlags( .to_string_lossy() .into_owned() }; - let outcome = crate::interp::with_interp_mut(|interp| { + let outcome = with_run_interp(|interp| { let ps1 = prompt(interp, "ps1", ">>> "); let ps2 = prompt(interp, "ps2", "... "); eprint!("{ps1}"); diff --git a/crates/weavepy-capi/tests/embed_lifecycle.rs b/crates/weavepy-capi/tests/embed_lifecycle.rs index 0613b94c..72510218 100644 --- a/crates/weavepy-capi/tests/embed_lifecycle.rs +++ b/crates/weavepy-capi/tests/embed_lifecycle.rs @@ -16,7 +16,10 @@ use weavepy_capi::initconfig::{ Py_InitializeFromConfig, }; use weavepy_capi::lifecycle::{Py_Finalize, Py_FinalizeEx, Py_Initialize, Py_IsInitialized}; -use weavepy_capi::pythonrun::{PyRun_SimpleString, PyRun_String, Py_eval_input}; +use weavepy_capi::pythonrun::{ + PyEval_EvalCode, PyRun_SimpleString, PyRun_String, Py_CompileString, Py_eval_input, + Py_file_input, +}; static ATEXIT_FIRED: std::sync::atomic::AtomicUsize = std::sync::atomic::AtomicUsize::new(0); @@ -51,6 +54,18 @@ fn eval_int(expr: &str) -> Option { #[test] fn embedding_lifecycle_end_to_end() { + // Embedders can enter from small native stacks, including the default + // Windows thread stack. Compilation and execution must grow their own. + std::thread::Builder::new() + .name("small-stack-embedder".to_owned()) + .stack_size(1024 * 1024) + .spawn(embedding_lifecycle) + .unwrap() + .join() + .unwrap(); +} + +fn embedding_lifecycle() { // --- Round 1: plain Py_Initialize ------------------------------ unsafe { Py_Initialize() }; assert_eq!(unsafe { Py_IsInitialized() }, 1, "initialized after init"); @@ -58,6 +73,44 @@ fn embedding_lifecycle_end_to_end() { assert_eq!(run_simple("x = 20 + 22"), 0, "simple exec succeeds"); assert_eq!(eval_int("x"), Some(42), "state visible across PyRun calls"); + // Nested definitions exercise the compiler before the VM's per-frame + // stack growth can run. Keep the depth well below Python's limits. + let mut source = String::new(); + for depth in 0..40 { + source.push_str(&format!("{}def f{depth}():\n", " ".repeat(depth))); + } + source.push_str(&format!("{}return 42\n", " ".repeat(40))); + for depth in (0..39).rev() { + source.push_str(&format!( + "{}return f{}()\n", + " ".repeat(depth + 1), + depth + 1 + )); + } + source.push_str("x = f0()\n"); + assert_eq!(run_simple(&source), 0, "nested compilation succeeds"); + assert_eq!(eval_int("x"), Some(42)); + + // The separate compile/evaluate entry points need the same headroom. + unsafe { + let source = CString::new(source).unwrap(); + let code = Py_CompileString(source.as_ptr(), c"".as_ptr(), Py_file_input); + assert!( + !code.is_null(), + "Py_CompileString succeeds on a small stack" + ); + let main = weavepy_capi::module::PyImport_AddModule(c"__main__".as_ptr()); + let dict = weavepy_capi::module::PyModule_GetDict(main); + let result = PyEval_EvalCode(code, dict, dict); + assert!( + !result.is_null(), + "PyEval_EvalCode succeeds on a small stack" + ); + weavepy_capi::object::Py_DecRef(result); + weavepy_capi::object::Py_DecRef(code); + } + assert_eq!(eval_int("x"), Some(42)); + // A failing PyRun_SimpleString reports -1 (and prints a traceback). assert_eq!(run_simple("raise ValueError('embedding')"), -1);