python / python/cpython

Add effective peephole optimizer for uop traces.

Offen
#152,215 0 Kommentare 2 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

3.16 interpreter-core topic-JIT type-feature
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
35.9k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Feature or enhancement

Currently we lack an effective peephole optimizer for uops traces.
We do some ad-hoc removal of LOAD/POP pairs, but many enhancements are missed.

For example, this silly program:

def add(a, b):
    return a + b

def loop(n=100_000):
    t = 0
    for _ in range(n):
        t += add(1,2)

if __name__ == "__main__":
    loop()

generates this trace:

Image

which contains the sequence:

_LOAD_FAST_BORROW 0
_LOAD_FAST_BORROW_1
_LOAD_CONST_INLINE_BORROW K 
_RROT_3
_POP_TOP_NOP
_POP_TOP_NOP

which should be reduced to

_LOAD_CONST_INLINE_BORROW K 
Linked PRs
  • gh-153035

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, den uop trace optimizer und die vorhandene ad-hoc-Entfernung von LOAD/POP zu lokalisieren, und reproduziere dann den bereitgestellten add/loop trace. Vergleiche die aktuelle Sequenz mit der vorgeschlagenen reduzierten Sequenz; abgeschlossen ist die Arbeit, wenn der Optimizer diesen Fall verarbeitet und eine Abdeckung für die Transformation vorhanden ist. Sieh dir vor dem Start den verknüpften PR gh-153035 an, da die Arbeit bereits damit verknüpft ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
compilers
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
30/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.