re is much slower than cpython
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 1.6k
- Forks
- 155
- Ø Merge
- 9 Std. 42 Min.
- Gemergte PRs (30 T.)
- 36
Beschreibung
I've been adding graal support to a classifier type project naively based on applying a bunch of regexes to an input, and while Graal works the regex application is quite slow: it's about 4x slower than cpython, while using 4 times the CPU.
Here's a repro script and attending data (basically a cut down version of the naive classifier implementation): script.zip
timings:
> python3.12 --version
Python 3.12.6
> time python3.12 run.py
75158 lines in 11.7s
156.1 us/line
python3.12 run.py 11.77s user 0.05s system 97% cpu 12.172 total
> graalpy --version
GraalPy 3.11.7 (Oracle GraalVM Native 24.1.0)
> time graalpy run.py
75158 lines in 48.2s
640.7 us/line
graalpy run.py 192.00s user 1.00s system 394% cpu 48.976 total
This is on a 10-core M1 Pro. Using cpusampler I confirmed that essentially all the "user" time is in _sre:
_search || 43580ms 98.6% || 43580ms 98.6% || <frozen graalpy._sre>~1:0
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, die angehängte script.zip-Reproduktion auszuführen und die Zeitmessungen von Python 3.12 und GraalPy zu vergleichen. Untersuche den von cpusampler identifizierten _sre-_search-Hotspot und den Einstiegspunkt run.py. Als abgeschlossen gilt die Aufgabe, wenn die Regex-Arbeitslast die gemeldete Verlangsamung nicht mehr zeigt und die Reproduktionszeitmessungen die Verbesserung dokumentieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- performance
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100