| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
|
Nice speedup. I wonder how much of the speedup would be achieved by just moving ctx->pattern and ctx->ptr into local variables and leaving the dispatch alone. I'm wondering this for a couple of reasons:
How easy would it be to apply the changes that move ctx->pattern and ctx->ptr, without the dispatching changes? |
Sorry, something went wrong.
@brandtbucher, could you show results with disabled computed gotos? Only regex-related benchmarks are interesting. |
Sorry, something went wrong.
|
With only computed gotos: - regex_v8: 158 ms +- 9 ms -> 144 ms +- 11 ms: 1.09x faster - regex_effbot: 19.2 ms +- 1.0 ms -> 18.2 ms +- 0.9 ms: 1.05x faster - regex_dna: 1.36 sec +- 0.01 sec -> 1.30 sec +- 0.01 sec: 1.05x faster With only new locals: - regex_v8: 158 ms +- 9 ms -> 142 ms +- 12 ms: 1.11x faster - regex_effbot: 19.2 ms +- 1.0 ms -> 18.2 ms +- 1.0 ms: 1.05x faster - regex_dna: 1.36 sec +- 0.01 sec -> 1.22 sec +- 0.01 sec: 1.11x faster Combined: - regex_v8: 158 ms +- 9 ms -> 132 ms +- 11 ms: 1.20x faster - regex_effbot: 19.2 ms +- 1.0 ms -> 17.5 ms +- 0.9 ms: 1.10x faster - regex_dna: 1.36 sec +- 0.01 sec -> 1.24 sec +- 0.01 sec: 1.09x faster For regex_v8 and regex_effbot, it looks like each optimization contributes about 50% of the speedup. regex_dna seems to benefit mostly from the new locals, for some reason (perhaps because the switch dispatch for that one is already highly stable/predicable?). I think we should keep both. |
Sorry, something went wrong.
|
Excellent! Before merging, could you compare it with 3.10? If there is the same difference, it would be worth to add a note about speed up 10-20% in the NEWS and What's New files. |
Sorry, something went wrong.
| @@ -0,0 +1,3 @@ | |||
| Improve the performance of :mod:`re` matching by using computed gotos (or | |||
There was a problem hiding this comment.
Add that it speeds up matching by 10-20%.
Sorry, something went wrong.
There was a problem hiding this comment.
Please don't. These claimed speedups are highly misleading.
The release notes for 3.9 and 3.10 have various claimed large speedups, yet 3.9 is no faster than 3.8 and 3.10 only a little bit faster.
Sorry, something went wrong.
There was a problem hiding this comment.
The benchmark results are convincing to me.
Without this it is not clear why bother with making this change at all.
Sorry, something went wrong.
There was a problem hiding this comment.
You'll only see a 10-20% speedup for these specific benchmarks, which are contrived.
Real programs, even those that spend a lot regexes will spend a much lower proportion of their time in the regex library.
Any number we give will be misleading.
Sorry, something went wrong.
There was a problem hiding this comment.
This branch vs 3.10:
- regex_v8: 147 ms +- 12 ms -> 132 ms +- 11 ms: 1.11x faster - regex_effbot: 19.1 ms +- 1.2 ms -> 17.5 ms +- 0.9 ms: 1.10x faster - regex_dna: 1.30 sec +- 0.01 sec -> 1.24 sec +- 0.01 sec: 1.04x faster
(Those numbers are very close to what you get by combining the latest re perf regressions with the numbers from this PR.)
I'll just leave the NEWS entry as-is (very few people read it anyways). I don't have a strong opinion on what should go in What's New (but @pablogsal might).
Sorry, something went wrong.
There was a problem hiding this comment.
Perhaps the wording "up to 10% faster on the pyperformance regular expression benchmarks" (or similar) might suffice.
Sorry, something went wrong.
There was a problem hiding this comment.
I think this should indeed go in the What's new. Could you add a small sentence in the Performance section, maybe? Specifying that the improvement is in the re engine and that it only affects re operations? If we need to remove it later is easier than the risk of forgetting to add something.
Sorry, something went wrong.
This is a backport of the upstream 3.11 improvement: python/cpython#91495 I only backported the ctx->pattern -> pattern and ctx->ptr -> ptr part because using computed goto actually decreased perf slightly on the opt build.
| Back | FazBrowse Home | New Git URL |
This makes a few performance improvements in sre_lib.h:
(The diff looks gnarly, but everything inside the main switch is just mechanical replacements to support these two changes. It's not really that bad.)
It yields nice improvements on all of the expected benchmarks, and a 1% improvement overall:
Maybe re won't be slower in 3.11 after all! 🙃