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 unterscipy.fft.fftundscipy.optimize.differential_evolution.Das interne Threading von SciPy erfolgt mit OS-Thread-Pools. OpenMP wird nicht innerhalb von SciPy verwendet.
SciPy funktioniert gut mit
multiprocessingund mitthreading. 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.