Parallel execution support in SciPy#

SciPy zielt darauf ab, eine leistungsfähige Funktionalität bereitzustellen, d. h. eine gute Ausführungsgeschwindigkeit zu erreichen. Auf moderner Computerhardware verfügen CPUs oft über viele CPU-Kerne – daher können Benutzer von paralleler Ausführung profitieren. Diese Seite gibt einen kurzen Überblick über die verfügbaren Optionen zur Nutzung paralleler Ausführung.

Einige wichtige Punkte zur Parallelität

  • SciPy selbst verwendet standardmäßig eine Single-Thread-Ausführung.

  • Die Ausnahme von dieser Single-Thread-Standardeinstellung ist Code, der für lineare Algebra-Funktionalität auf eine BLAS- oder LAPACK-Bibliothek zugreift (entweder direkt oder über NumPy). BLAS/LAPACK-Bibliotheken verwenden fast immer standardmäßig eine Multi-Thread-Ausführung, die typischerweise alle verfügbaren CPU-Kerne nutzt.

    • Benutzer können das Threading-Verhalten der BLAS/LAPACK-Bibliothek, mit der SciPy und NumPy verknüpft sind, über threadpoolctl steuern.

  • SciPy-Funktionalität kann eine parallele Ausführung optional bereitstellen. Dies wird über ein workers= Schlüsselwort in einzelnen APIs verfügbar gemacht, das eine Ganzzahl für die Anzahl der zu verwendenden Threads oder Prozesse und in einigen Fällen auch eine Map-ähnliche aufrufbare Funktion (z. B. multiprocessing.Pool) annimmt. Beispiele finden Sie unter scipy.fft.fft und scipy.optimize.differential_evolution.

    • Das interne Threading von SciPy erfolgt mit OS-Thread-Pools. OpenMP wird nicht innerhalb von SciPy verwendet.

  • SciPy funktioniert gut mit multiprocessing und mit threading. Ersteres hat einen höheren Overhead als Letzteres, ist aber weit verbreitet und robust. Letzteres kann Leistungsvorteile für einige Nutzungsszenarien bieten – lesen Sie jedoch Thread Safety in SciPy.

  • SciPy bietet ab SciPy 1.15.0 (und Python 3.13.0, NumPy 2.1.0) eine *experimentelle* Unterstützung für frei-threaded CPython.

  • SciPy bietet in einer wachsenden Anzahl von Untermodulen und Funktionen eine *experimentelle* Unterstützung für andere Array-Bibliotheken als NumPy, wie z. B. PyTorch, CuPy und JAX. Diese Bibliotheken verwenden standardmäßig parallele Ausführung und können erhebliche Leistungsvorteile (und GPU-Ausführung) bieten. Weitere Details finden Sie unter Support for the array API standard.