Ned Deily <n...@python.org> added the comment:
Summary: With the 3.10.0rc1 release, this performance regression in the var_access_benchmark starting with the 3.10.0b1 binaries in the python.org macOS universal2 installer is now resolved. With the rc1 release, the performance of this micro benchmark has actually improved over alpha7 in many cases, most notably on Intel Macs. We have also taken some steps to reduce the chances of significant performance regressions in future releases of the macOS binaries going undetected prior to release. Details: All var_access_benchmark results (Appendix A and B) are from running macOS Big Sur 11.5.1 (the current release at the moment). The rc1 binaries were also built on 11.5.1 using the current Apple (Xcode) Command Line Tools 12.5.1. In general, we build the python.org macOS installers on the most current macOS and Command Line Tools that have been released by Apple prior to that Python release. The a7 and b2 released universal2 binaries were thus made on then current versions of macOS Big Sur and the Command Line Tools, each different from rc1. To put these results in context, let me once again note that the primary goal of the python.org macOS installers for many years has been to provide a convenient way to run Python on macOS on as many different Mac systems as possible with one download. For 3.10, the universal2 installer variant we provide is designed to run natively on all Macs that can run any version of macOS from 10.9 through the current macOS 11 Big Sur (and soon to include macOS 12 Monterey), both Intel and Apple Silicon (M1) Macs. To be able to run on such a wide variety of systems obviously requires some compromises. Thus providing optimum performance in every situation has *never* been a goal for these installers. That doesn't mean we should totally ignore performance issues and I am grateful to Raymond for bringing this issue forward. But, and not to belabor the point: for those situations where optimum performance is important, there is no substitute to using a Python built and optimized explicitly for th at environment; in other words, don't look to the python.org binaries for those cases. As an example, with 3.10.0b1, we introduced the first python.org macOS builds that use newer compile- and link-time optimizations (--enable-optimizations and --with-lto). There were some kinks with that that have been subsequently ironed out. But the performance improvements aren't uniform across all systems. It appears that Intel Macs see much more of an improvement than Apple Silicon Macs do. There are probably a couple of reasons for that: for one, the longer experience with the tool chain for Intel archs, but, perhaps more importantly, we currently build universal2 binaries on Intel-based Macs which means performance-based optimizations by the tool chain are based on the performance on an Intel arch which may not be the same as performance on an Apple Silicon (arm64) CPU. That's a topic for future investigation but it is an example of the potential pitfalls when looking at performance. Another example is that while there are some significant differences in the var_access_benchmark results, which targets specific micro-operations in the Python virtual machine, there is a different story looking at the larger-scale "realworld" benchmarks in the pyperformance package. When I first started looking at this issue, I ran pyperformance and var_access_benchmark and found that, in general, there were *significant* performance improvements in most pyperformance benchmarks between 3.10.0a7 and 3.10.0b2 even though the var_access_benchmark showed performance regressions. For 3.10.0rc1, the pyperformance results have mostly improved even more. I have with some trepidation included some pyperformance results in Appendix C (3.10.0a7 vs 3.10.0b2) and Appendix D (3.10.0a7 vs 3.10.0rc1). Note that these results were run on a different, faster Intel Mac than the var_access_benchmark results and were run under different updates of macOS 11 so they should be viewed cautiously; as al ways with performance issues, your mileage may vary. So by now, one might be curious as to how the performance regression was fixed in rc1. The answer at the moment is: I'm not totally sure! There are a *lot* of moving parts in making a Python release and the binaries that we provide for macOS. While I do try to control the build environments as much as possible (for example, by using dedicated virtual machines for builds) and be conservative about making changes to the build process and environments, especially later in a development/release cycle, as noted above I normally try to keep up with the most recent Apple updates to a given macOS version and build tools to ensure everyone is getting the benefit of the latest security and performance fixes. There have been Apple updates along the way between a7, b2, and rc1. So I can't rule those out and at the moment seem to me to be the most likely. I have put quite a bit of effort into trying to reproduce these results by rebuilding the previous Python pre-releases on newer macOS updates a nd vice versa but with inconclusive results. I am also handwaving over the special requirements to produce macOS binaries that can be widely-distributed and easily-installed, such as those needed to meet Apple's Gatekeeper requirements (code-signing, hardened runtime, notarization, etc) that have become increasingly stringent (with good reason in an effort to increase overall system security); these can have a performance impact as well. There certainly might be other causes (including operator error) but I don't think there is much to be gained by further pursuing these lines. Instead, I have added some additional steps to our macOS installer manufacturing process to now run var_access_benchmark as part of the installer testing we do on multiple systems for every release and also to run the lengthier pyperformance benchmarks at key points in a release cycle. Thanks to this issue, we now have some baseline measurements and, with some due diligence, we should be able to catch future significant regressions earlier in a release, unlike up to now where we have basically ignored performance concerns. That's a good thing, I think! ----------------------------------------------------------------- Appendix A: =========== python.org macOS universal2: 3.10.0a7 vs 3.10.0b2 vs 3.10.0rc1 Intel Mac Mini (3Ghz 6-Core Intel Core i5) macOS Big Sur 11.5.1 alpha7 beta2 rc1 ====== ====== ====== Variable and attribute read access: read_local 3.6 ns 4.9 ns 3.3 ns read_nonlocal 3.8 ns 4.5 ns 3.5 ns read_global 5.6 ns 6.0 ns 5.2 ns read_builtin 5.6 ns 6.1 ns 5.3 ns read_classvar_from_class 16.1 ns 16.6 ns 14.3 ns read_classvar_from_instance 14.9 ns 15.6 ns 13.5 ns read_instancevar 13.6 ns 12.3 ns 10.7 ns read_instancevar_slots 7.6 ns 8.9 ns 8.2 ns read_namedtuple 18.0 ns 17.4 ns 15.8 ns read_boundmethod 38.0 ns 33.5 ns 34.0 ns Variable and attribute write access: write_local 4.3 ns 4.6 ns 3.8 ns write_nonlocal 4.1 ns 4.8 ns 3.9 ns write_global 13.9 ns 13.5 ns 13.2 ns write_classvar 35.4 ns 33.4 ns 34.6 ns write_instancevar 34.5 ns 30.3 ns 27.3 ns write_instancevar_slots 22.7 ns 23.7 ns 20.8 ns Data structure read access: read_list 17.6 ns 20.4 ns 16.8 ns read_deque 19.1 ns 19.8 ns 17.1 ns read_dict 19.5 ns 17.5 ns 15.7 ns read_strdict 16.6 ns 16.8 ns 14.8 ns Data structure write access: write_list 17.8 ns 20.1 ns 18.2 ns write_deque 21.5 ns 22.0 ns 20.7 ns write_dict 24.0 ns 21.5 ns 19.2 ns write_strdict 21.8 ns 20.5 ns 18.9 ns Stack (or queue) operations: list_append_pop 46.2 ns 42.4 ns 39.3 ns deque_append_pop 40.3 ns 37.8 ns 31.9 ns deque_append_popleft 40.9 ns 37.8 ns 32.2 ns Timing loop overhead: loop_overhead 0.3 ns 0.3 ns 0.2 ns ----------------------------------------------------------------- Appendix B: =========== python.org macOS universal2: 3.10.0a7 vs 3.10.0b2 vs 3.10.0rc1 Apple Silicon MacBook Air (Apple M1 2020) macOS Big Sur 11.5.1 alpha7 beta2 rc1 ====== ====== ====== Variable and attribute read access: read_local 4.1 ns 4.9 ns 4.1 ns read_nonlocal 4.1 ns 4.5 ns 4.1 ns read_global 4.2 ns 5.2 ns 4.1 ns read_builtin 4.2 ns 4.9 ns 4.1 ns read_classvar_from_class 10.2 ns 12.6 ns 10.7 ns read_classvar_from_instance 9.5 ns 12.0 ns 9.5 ns read_instancevar 9.3 ns 11.3 ns 9.5 ns read_instancevar_slots 5.7 ns 8.7 ns 6.6 ns read_namedtuple 11.4 ns 14.2 ns 11.8 ns read_boundmethod 23.9 ns 23.1 ns 21.3 ns Variable and attribute write access: write_local 4.1 ns 5.2 ns 4.1 ns write_nonlocal 4.1 ns 5.1 ns 4.1 ns write_global 9.5 ns 10.1 ns 8.7 ns write_classvar 22.1 ns 25.5 ns 25.7 ns write_instancevar 21.5 ns 21.2 ns 18.6 ns write_instancevar_slots 15.9 ns 17.6 ns 15.3 ns Data structure read access: read_list 10.3 ns 14.1 ns 11.0 ns read_deque 11.1 ns 15.6 ns 11.9 ns read_dict 12.1 ns 13.4 ns 11.0 ns read_strdict 10.8 ns 13.4 ns 10.9 ns Data structure write access: write_list 12.5 ns 16.3 ns 12.8 ns write_deque 12.7 ns 16.8 ns 13.5 ns write_dict 15.4 ns 16.6 ns 13.9 ns write_strdict 14.8 ns 17.1 ns 13.8 ns Stack (or queue) operations: list_append_pop 27.5 ns 29.0 ns 24.6 ns deque_append_pop 25.3 ns 26.0 ns 21.6 ns deque_append_popleft 25.2 ns 26.4 ns 21.6 ns Timing loop overhead: loop_overhead 0.2 ns 0.3 ns 0.2 ns ----------------------------------------------------------------- Appendix C: =========== pyperformance (python.org macOS universal2: 3.10.0a7 vs 3.10.0b2) Intel iMac (3.6 GHz 8-Core Intel Core i9) py310a7_11.json =============== Performance version: 1.0.2 Report on macOS-11.3.1-x86_64-i386-64bit Number of logical CPUs: 16 Start date: 2021-05-25 23:21:49.171748 End date: 2021-05-25 23:41:48.281555 py310b2_11.json =============== Performance version: 1.0.2 Report on macOS-11.4-x86_64-i386-64bit Number of logical CPUs: 16 Start date: 2021-05-31 11:11:51.120522 End date: 2021-05-31 11:31:17.010744 ### 2to3 ### Mean +- std dev: 404 ms +- 46 ms -> 334 ms +- 28 ms: 1.21x faster Significant (t=9.99) ### chameleon ### Mean +- std dev: 10.8 ms +- 0.2 ms -> 8.8 ms +- 0.2 ms: 1.23x faster Significant (t=62.03) ### chaos ### Mean +- std dev: 130 ms +- 1 ms -> 103 ms +- 2 ms: 1.27x faster Significant (t=95.95) ### crypto_pyaes ### Mean +- std dev: 136 ms +- 1 ms -> 112 ms +- 2 ms: 1.21x faster Significant (t=74.54) ### deltablue ### Mean +- std dev: 9.26 ms +- 0.12 ms -> 7.03 ms +- 0.15 ms: 1.32x faster Significant (t=87.77) ### django_template ### Mean +- std dev: 60.1 ms +- 1.1 ms -> 45.6 ms +- 1.0 ms: 1.32x faster Significant (t=75.49) ### dulwich_log ### Mean +- std dev: 109 ms +- 1 ms -> 93 ms +- 2 ms: 1.17x faster Significant (t=57.00) ### fannkuch ### Mean +- std dev: 524 ms +- 3 ms -> 476 ms +- 5 ms: 1.10x faster Significant (t=63.67) ### float ### Mean +- std dev: 119 ms +- 2 ms -> 96 ms +- 2 ms: 1.24x faster Significant (t=59.37) ### go ### Mean +- std dev: 260 ms +- 2 ms -> 217 ms +- 4 ms: 1.20x faster Significant (t=77.33) ### hexiom ### Mean +- std dev: 11.0 ms +- 0.1 ms -> 9.0 ms +- 0.1 ms: 1.23x faster Significant (t=94.06) ### json_dumps ### Mean +- std dev: 15.1 ms +- 0.1 ms -> 12.1 ms +- 0.3 ms: 1.25x faster Significant (t=74.07) ### json_loads ### Mean +- std dev: 30.9 us +- 0.3 us -> 23.8 us +- 0.4 us: 1.30x faster Significant (t=116.60) ### logging_format ### Mean +- std dev: 12.1 us +- 0.2 us -> 9.4 us +- 0.2 us: 1.28x faster Significant (t=72.96) ### logging_silent ### Mean +- std dev: 218 ns +- 6 ns -> 159 ns +- 8 ns: 1.36x faster Significant (t=46.17) ### logging_simple ### Mean +- std dev: 11.0 us +- 0.2 us -> 8.4 us +- 0.2 us: 1.31x faster Significant (t=77.65) ### mako ### Mean +- std dev: 18.9 ms +- 0.4 ms -> 14.7 ms +- 0.2 ms: 1.29x faster Significant (t=78.98) ### meteor_contest ### Mean +- std dev: 108 ms +- 1 ms -> 96 ms +- 2 ms: 1.13x faster Significant (t=48.25) ### nbody ### Mean +- std dev: 159 ms +- 2 ms -> 139 ms +- 3 ms: 1.15x faster Significant (t=41.09) ### nqueens ### Mean +- std dev: 116 ms +- 1 ms -> 98 ms +- 2 ms: 1.18x faster Significant (t=72.36) ### pathlib ### Mean +- std dev: 51.5 ms +- 0.8 ms -> 44.1 ms +- 0.9 ms: 1.17x faster Significant (t=48.46) ### pickle ### Mean +- std dev: 12.1 us +- 0.1 us -> 9.3 us +- 0.2 us: 1.30x faster Significant (t=94.04) ### pickle_dict ### Mean +- std dev: 28.6 us +- 0.1 us -> 21.7 us +- 0.3 us: 1.32x faster Significant (t=167.94) ### pickle_list ### Mean +- std dev: 4.55 us +- 0.04 us -> 3.59 us +- 0.07 us: 1.27x faster Significant (t=94.87) ### pickle_pure_python ### Mean +- std dev: 547 us +- 4 us -> 424 us +- 11 us: 1.29x faster Significant (t=78.84) ### pidigits ### Mean +- std dev: 183 ms +- 1 ms -> 172 ms +- 2 ms: 1.07x faster Significant (t=38.00) ### pyflate ### Mean +- std dev: 782 ms +- 8 ms -> 634 ms +- 9 ms: 1.23x faster Significant (t=100.31) ### python_startup ### Mean +- std dev: 14.4 ms +- 0.1 ms -> 13.5 ms +- 0.4 ms: 1.07x faster Significant (t=32.46) ### python_startup_no_site ### Mean +- std dev: 10.7 ms +- 0.1 ms -> 10.1 ms +- 0.1 ms: 1.06x faster Significant (t=58.48) ### raytrace ### Mean +- std dev: 616 ms +- 4 ms -> 452 ms +- 6 ms: 1.36x faster Significant (t=174.57) ### regex_compile ### Mean +- std dev: 197 ms +- 2 ms -> 165 ms +- 3 ms: 1.19x faster Significant (t=67.90) ### regex_dna ### Mean +- std dev: 174 ms +- 1 ms -> 170 ms +- 3 ms: 1.02x faster Not significant ### regex_effbot ### Mean +- std dev: 3.28 ms +- 0.03 ms -> 3.07 ms +- 0.06 ms: 1.07x faster Significant (t=26.18) ### regex_v8 ### Mean +- std dev: 26.0 ms +- 0.2 ms -> 23.1 ms +- 0.2 ms: 1.13x faster Significant (t=78.18) ### richards ### Mean +- std dev: 91.2 ms +- 0.8 ms -> 67.2 ms +- 2.2 ms: 1.36x faster Significant (t=80.61) ### scimark_fft ### Mean +- std dev: 498 ms +- 4 ms -> 373 ms +- 6 ms: 1.34x faster Significant (t=140.60) ### scimark_lu ### Mean +- std dev: 194 ms +- 2 ms -> 155 ms +- 2 ms: 1.25x faster Significant (t=88.27) ### scimark_monte_carlo ### Mean +- std dev: 120 ms +- 1 ms -> 94 ms +- 2 ms: 1.28x faster Significant (t=79.90) ### scimark_sor ### Mean +- std dev: 231 ms +- 1 ms -> 179 ms +- 4 ms: 1.29x faster Significant (t=88.38) ### scimark_sparse_mat_mult ### Mean +- std dev: 7.31 ms +- 0.19 ms -> 5.11 ms +- 0.10 ms: 1.43x faster Significant (t=79.51) ### spectral_norm ### Mean +- std dev: 186 ms +- 3 ms -> 139 ms +- 3 ms: 1.34x faster Significant (t=93.33) ### sqlalchemy_declarative ### Mean +- std dev: 165 ms +- 3 ms -> 144 ms +- 3 ms: 1.15x faster Significant (t=37.78) ### sqlalchemy_imperative ### Mean +- std dev: 26.2 ms +- 0.8 ms -> 22.9 ms +- 0.6 ms: 1.14x faster Significant (t=24.65) ### sqlite_synth ### Mean +- std dev: 2.98 us +- 0.04 us -> 2.52 us +- 0.06 us: 1.19x faster Significant (t=47.11) ### sympy_expand ### Mean +- std dev: 615 ms +- 6 ms -> 521 ms +- 10 ms: 1.18x faster Significant (t=63.67) ### sympy_integrate ### Mean +- std dev: 25.5 ms +- 0.3 ms -> 23.1 ms +- 0.4 ms: 1.10x faster Significant (t=38.96) ### sympy_str ### Mean +- std dev: 366 ms +- 4 ms -> 316 ms +- 4 ms: 1.16x faster Significant (t=61.03) ### sympy_sum ### Mean +- std dev: 204 ms +- 3 ms -> 186 ms +- 8 ms: 1.10x faster Significant (t=16.06) ### telco ### Mean +- std dev: 7.40 ms +- 0.15 ms -> 5.91 ms +- 0.13 ms: 1.25x faster Significant (t=57.40) ### tornado_http ### Mean +- std dev: 167 ms +- 4 ms -> 157 ms +- 5 ms: 1.07x faster Significant (t=13.39) ### unpack_sequence ### Mean +- std dev: 47.3 ns +- 2.7 ns -> 61.4 ns +- 0.5 ns: 1.30x slower Significant (t=-40.46) ### unpickle ### Mean +- std dev: 17.4 us +- 0.2 us -> 13.7 us +- 0.2 us: 1.27x faster Significant (t=91.92) ### unpickle_list ### Mean +- std dev: 4.73 us +- 0.07 us -> 3.93 us +- 0.10 us: 1.21x faster Significant (t=49.78) ### unpickle_pure_python ### Mean +- std dev: 365 us +- 7 us -> 311 us +- 4 us: 1.18x faster Significant (t=51.04) ### xml_etree_generate ### Mean +- std dev: 103 ms +- 2 ms -> 89 ms +- 1 ms: 1.15x faster Significant (t=48.39) ### xml_etree_iterparse ### Mean +- std dev: 115 ms +- 3 ms -> 101 ms +- 2 ms: 1.14x faster Significant (t=29.21) ### xml_etree_parse ### Mean +- std dev: 158 ms +- 3 ms -> 145 ms +- 3 ms: 1.09x faster Significant (t=24.41) ### xml_etree_process ### Mean +- std dev: 85.5 ms +- 1.8 ms -> 70.4 ms +- 1.1 ms: 1.22x faster Significant (t=55.52) ----------------------------------------------------------------- Appendix D: =========== pyperformance (python.org macOS universal2: 3.10.0a7 vs 3.10.0rc1) Intel iMac (3.6 GHz 8-Core Intel Core i9) py310a7_11.json =============== Performance version: 1.0.2 Report on macOS-11.3.1-x86_64-i386-64bit Number of logical CPUs: 16 Start date: 2021-05-25 23:21:49.171748 End date: 2021-05-25 23:41:48.281555 py310rc1.json ============= Performance version: 1.0.2 Report on macOS-11.5.1-x86_64-i386-64bit Number of logical CPUs: 16 Start date: 2021-08-02 18:43:01.388887 End date: 2021-08-02 19:01:56.172079 ### 2to3 ### Mean +- std dev: 404 ms +- 46 ms -> 314 ms +- 24 ms: 1.29x faster Significant (t=13.40) ### chameleon ### Mean +- std dev: 10.8 ms +- 0.2 ms -> 8.5 ms +- 0.1 ms: 1.28x faster Significant (t=78.99) ### chaos ### Mean +- std dev: 130 ms +- 1 ms -> 95 ms +- 1 ms: 1.37x faster Significant (t=143.64) ### crypto_pyaes ### Mean +- std dev: 136 ms +- 1 ms -> 109 ms +- 1 ms: 1.24x faster Significant (t=136.81) ### deltablue ### Mean +- std dev: 9.26 ms +- 0.12 ms -> 6.76 ms +- 0.13 ms: 1.37x faster Significant (t=108.53) ### django_template ### Mean +- std dev: 60.1 ms +- 1.1 ms -> 44.3 ms +- 0.9 ms: 1.36x faster Significant (t=84.30) ### dulwich_log ### Mean +- std dev: 109 ms +- 1 ms -> 91 ms +- 2 ms: 1.19x faster Significant (t=65.99) ### fannkuch ### Mean +- std dev: 524 ms +- 3 ms -> 444 ms +- 5 ms: 1.18x faster Significant (t=114.93) ### float ### Mean +- std dev: 119 ms +- 2 ms -> 93 ms +- 2 ms: 1.28x faster Significant (t=62.91) ### go ### Mean +- std dev: 260 ms +- 2 ms -> 204 ms +- 3 ms: 1.27x faster Significant (t=119.49) ### hexiom ### Mean +- std dev: 11.0 ms +- 0.1 ms -> 8.5 ms +- 0.2 ms: 1.29x faster Significant (t=80.26) ### json_dumps ### Mean +- std dev: 15.1 ms +- 0.1 ms -> 12.0 ms +- 0.2 ms: 1.27x faster Significant (t=91.36) ### json_loads ### Mean +- std dev: 30.9 us +- 0.3 us -> 23.2 us +- 0.4 us: 1.34x faster Significant (t=132.63) ### logging_format ### Mean +- std dev: 12.1 us +- 0.2 us -> 9.2 us +- 0.2 us: 1.31x faster Significant (t=84.91) ### logging_silent ### Mean +- std dev: 218 ns +- 6 ns -> 151 ns +- 4 ns: 1.44x faster Significant (t=74.47) ### logging_simple ### Mean +- std dev: 11.0 us +- 0.2 us -> 8.3 us +- 0.2 us: 1.33x faster Significant (t=79.84) ### mako ### Mean +- std dev: 18.9 ms +- 0.4 ms -> 14.1 ms +- 0.3 ms: 1.34x faster Significant (t=81.37) ### meteor_contest ### Mean +- std dev: 108 ms +- 1 ms -> 92 ms +- 1 ms: 1.18x faster Significant (t=72.28) ### nbody ### Mean +- std dev: 159 ms +- 2 ms -> 120 ms +- 3 ms: 1.32x faster Significant (t=96.54) ### nqueens ### Mean +- std dev: 116 ms +- 1 ms -> 94 ms +- 1 ms: 1.23x faster Significant (t=106.68) ### pathlib ### Mean +- std dev: 51.5 ms +- 0.8 ms -> 46.5 ms +- 0.8 ms: 1.11x faster Significant (t=33.82) ### pickle ### Mean +- std dev: 12.1 us +- 0.1 us -> 9.5 us +- 0.2 us: 1.28x faster Significant (t=110.62) ### pickle_dict ### Mean +- std dev: 28.6 us +- 0.1 us -> 21.5 us +- 0.3 us: 1.33x faster Significant (t=176.35) ### pickle_list ### Mean +- std dev: 4.55 us +- 0.04 us -> 3.62 us +- 0.08 us: 1.26x faster Significant (t=82.58) ### pickle_pure_python ### Mean +- std dev: 547 us +- 4 us -> 402 us +- 8 us: 1.36x faster Significant (t=130.95) ### pidigits ### Mean +- std dev: 183 ms +- 1 ms -> 172 ms +- 2 ms: 1.07x faster Significant (t=35.90) ### pyflate ### Mean +- std dev: 782 ms +- 8 ms -> 598 ms +- 8 ms: 1.31x faster Significant (t=127.68) ### python_startup ### Mean +- std dev: 14.4 ms +- 0.1 ms -> 13.2 ms +- 0.3 ms: 1.09x faster Significant (t=46.93) ### python_startup_no_site ### Mean +- std dev: 10.7 ms +- 0.1 ms -> 10.2 ms +- 0.2 ms: 1.05x faster Significant (t=42.58) ### raytrace ### Mean +- std dev: 616 ms +- 4 ms -> 434 ms +- 7 ms: 1.42x faster Significant (t=172.50) ### regex_compile ### Mean +- std dev: 197 ms +- 2 ms -> 159 ms +- 2 ms: 1.24x faster Significant (t=106.63) ### regex_dna ### Mean +- std dev: 174 ms +- 1 ms -> 172 ms +- 3 ms: 1.01x faster Not significant ### regex_effbot ### Mean +- std dev: 3.28 ms +- 0.03 ms -> 3.14 ms +- 0.05 ms: 1.05x faster Significant (t=20.22) ### regex_v8 ### Mean +- std dev: 26.0 ms +- 0.2 ms -> 22.8 ms +- 0.2 ms: 1.14x faster Significant (t=78.67) ### richards ### Mean +- std dev: 91.2 ms +- 0.8 ms -> 64.5 ms +- 1.6 ms: 1.41x faster Significant (t=119.12) ### scimark_fft ### Mean +- std dev: 498 ms +- 4 ms -> 347 ms +- 5 ms: 1.44x faster Significant (t=185.69) ### scimark_lu ### Mean +- std dev: 194 ms +- 2 ms -> 148 ms +- 3 ms: 1.31x faster Significant (t=87.01) ### scimark_monte_carlo ### Mean +- std dev: 120 ms +- 1 ms -> 89 ms +- 2 ms: 1.35x faster Significant (t=99.22) ### scimark_sor ### Mean +- std dev: 231 ms +- 1 ms -> 166 ms +- 3 ms: 1.39x faster Significant (t=169.87) ### scimark_sparse_mat_mult ### Mean +- std dev: 7.31 ms +- 0.19 ms -> 4.82 ms +- 0.13 ms: 1.52x faster Significant (t=83.76) ### spectral_norm ### Mean +- std dev: 186 ms +- 3 ms -> 134 ms +- 3 ms: 1.39x faster Significant (t=104.61) ### sqlalchemy_declarative ### Mean +- std dev: 165 ms +- 3 ms -> 143 ms +- 4 ms: 1.16x faster Significant (t=33.78) ### sqlalchemy_imperative ### Mean +- std dev: 26.2 ms +- 0.8 ms -> 21.8 ms +- 0.6 ms: 1.20x faster Significant (t=32.12) ### sqlite_synth ### Mean +- std dev: 2.98 us +- 0.04 us -> 2.43 us +- 0.04 us: 1.23x faster Significant (t=68.81) ### sympy_expand ### Mean +- std dev: 615 ms +- 6 ms -> 486 ms +- 8 ms: 1.27x faster Significant (t=106.54) ### sympy_integrate ### Mean +- std dev: 25.5 ms +- 0.3 ms -> 21.2 ms +- 0.4 ms: 1.20x faster Significant (t=73.67) ### sympy_str ### Mean +- std dev: 366 ms +- 4 ms -> 296 ms +- 4 ms: 1.24x faster Significant (t=92.10) ### sympy_sum ### Mean +- std dev: 204 ms +- 3 ms -> 172 ms +- 3 ms: 1.19x faster Significant (t=57.73) ### telco ### Mean +- std dev: 7.40 ms +- 0.15 ms -> 5.67 ms +- 0.12 ms: 1.31x faster Significant (t=70.86) ### tornado_http ### Mean +- std dev: 167 ms +- 4 ms -> 154 ms +- 5 ms: 1.09x faster Significant (t=18.37) ### unpack_sequence ### Mean +- std dev: 47.3 ns +- 2.7 ns -> 44.4 ns +- 0.7 ns: 1.07x faster Significant (t=8.35) ### unpickle ### Mean +- std dev: 17.4 us +- 0.2 us -> 13.2 us +- 0.3 us: 1.32x faster Significant (t=81.72) ### unpickle_list ### Mean +- std dev: 4.73 us +- 0.07 us -> 3.87 us +- 0.05 us: 1.22x faster Significant (t=76.77) ### unpickle_pure_python ### Mean +- std dev: 365 us +- 7 us -> 283 us +- 3 us: 1.29x faster Significant (t=78.83) ### xml_etree_generate ### Mean +- std dev: 103 ms +- 2 ms -> 83 ms +- 2 ms: 1.23x faster Significant (t=57.90) ### xml_etree_iterparse ### Mean +- std dev: 115 ms +- 3 ms -> 95 ms +- 1 ms: 1.21x faster Significant (t=40.39) ### xml_etree_parse ### Mean +- std dev: 158 ms +- 3 ms -> 142 ms +- 2 ms: 1.11x faster Significant (t=34.23) ### xml_etree_process ### Mean +- std dev: 85.5 ms +- 1.8 ms -> 66.1 ms +- 1.3 ms: 1.29x faster Significant (t=68.72) ----------------------------------------------------------------- ---------- resolution: -> fixed stage: -> resolved status: open -> closed _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue44037> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com