re is much slower than cpython
オープン
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 1.6k
- フォーク
- 155
- 平均マージ
- 9時間 42分
- マージ済み PR(30日)
- 36
説明
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
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、添付された script.zip の再現を実行し、Python 3.12 と GraalPy のタイミングを比較します。cpusampler が特定した _sre _search ホットスポットと、エントリポイント run.py を調査します。正規表現のワークロードで報告された低速化が見られなくなり、再現のタイミングに改善が記録されていれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- performance
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100