[PERF]: Handle generic sequences more efficiently
Dieses Issue hat noch niemand übernommen.
- 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
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 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