NVIDIA / NVIDIA/cuda-python

[PERF]: Handle generic sequences more efficiently

Offen
#1,640 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

cuda.bindings P1 performance
Vorherrschende Sprache
Cython
Sterne
3.4k
Forks
329
Ø Merge
1 T. 23 Std.
Gemergte PRs (30 T.)
116

Beschreibung

In driver, runtime and nvrtc, most of the sequence arguments are of a type like Optional[tuple[cuuint64_t] | list[cuuint64_t]].

They are then converted to C arrays using code like:

for idx in range(elementStridesLen):
            elementStridesStatic[idx] = <cydriver.cuuint32_t>(<cuuint32_t?> elementStrides[idx])._pvt_ptr[0]

elementStrides[idx] here uses the generic PySequence_GetItem, which first must check whether the sequence is a list or tuple before getting the item. This check is performed repeatedly for each item, even though the type of the sequence remains constant. The branch predictor may or may not be able to smooth this out.

Ideally, we would use the PySequence_Fast family of functions. Unfortunately, Cython's wrappers of low-level Python/C API functions involving borrowing are broken -- we would probably need to revert to raw C snippets to make that work.

Alternatively, we could do something like:

if type(seq) is list:
    for idx in range(len(seq)):
        # use cpython.PyList_GetItemInt...
elif type(seq) is tuple:
    for idx in range(len(seq)):
        # use cpython.PyTuple_GetItemInt...

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, die generischen Schleifen zur Sequenzkonvertierung in den Bereichen driver, runtime und nvrtc zu finden. Lies die Cython-Wrapper für den Sequenzzugriff und die dokumentierten PySequence_Fast-APIs und vergleiche anschließend die im Issue beschriebenen möglichen Zugriffspfade. Als abgeschlossen gilt die Aufgabe, wenn die betroffenen Konvertierungen einen effizienten, unterstützten Ansatz verwenden, ohne ihr Verhalten zu ändern.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
c, python
Bereich
performance
Issue-Typ
Refactoring
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
48/100

Neue Issues direkt in Ihr Postfach

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