python / python/cpython

JIT: Set the IP and check for invalidation in `POP_TOP` only if `Py_Dealloc` is called.

Aperta
#152,106 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

3.16 interpreter-core performance topic-JIT type-feature
Lingua principale
Python
Stelle
77.2k
Fork
35.9k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

The optimizer removes many POP_TOPs, but quite a few remain.

The code for POP_TOP looks like this:

    inst(POP_TOP, (value --)) {
        PyStackRef_XCLOSE(value);
    }

which is fine for the interprete but in the JIT, as POP_TOP is marked as escaping, we need to set the IP before and check for invalidation afterwards.

What we could do, is have a version of POP_TOP that sets the IP and checks for invalidation only if Py_Dealloc is called, so we don't need to add SET_IP and CHECK_VALIDITY.

The new form of POP_TOP would look like this:

    op(_POP_TOP_SET_IP_CHECK_INVALID, (value --)) {
        if (do_decref_and_refcnt_is_zero(value)) {
            SET_IP()
            Py_Dealloc()
            CHECK_VALID();
        }
   }

_POP_TOP_SET_IP_CHECK_INVALID should be inserted in the same pass that we insert _SET_IP and _CHECK_VALIDITY as we know whether we need to insert those uops, and leave POP_TOP alone in those cases.

Overall, this should speed things up as it doesn't increase the overall code size, but it does execute less code in many cases.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Esamina l’implementazione JIT di POP_TOP e il pass che inserisce _SET_IP e _CHECK_VALIDITY. Segui do_decref_and_refcnt_is_zero e i percorsi esistenti SET_IP, Py_Dealloc e CHECK_VALID; il lavoro è completato quando la forma specializzata viene inserita solo dove necessario, mentre POP_TOP rimane invariato altrove e il comportamento di invalidazione viene preservato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
c, python
Ambito
compilers, performance
Tipo di issue
Refactoring
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.