Поддержка параллельного выполнения в SciPy#
SciPy стремится предоставить функциональность, которая является производительной, т.е. имеет хорошую скорость выполнения. На современном вычислительном оборудовании процессоры часто имеют много ядер — и, следовательно, пользователи могут извлечь выгоду из параллельного выполнения. Эта страница призвана дать краткий обзор доступных вариантов для использования параллельного выполнения.
Некоторые ключевые моменты, связанные с параллелизмом:
SciPy по умолчанию использует однопоточное выполнение.
Исключением из этого однопоточного режима по умолчанию является код, который вызывает библиотеку BLAS или LAPACK для функций линейной алгебры (напрямую или через NumPy). Библиотеки BLAS/LAPACK почти всегда по умолчанию выполняются в многопоточном режиме, обычно используя все доступные ядра процессора.
Пользователи могут управлять поведением потоков библиотеки BLAS/LAPACK, с которой связаны SciPy и NumPy, через threadpoolctl.
Функциональность SciPy может обеспечивать параллельное выполнение по выбору. Это предоставляется через
workers=ключевое слово в отдельных API, которое принимает целое число для количества используемых потоков или процессов, а в некоторых случаях также вызываемый объект, подобный map (например,multiprocessing.Pool). См.scipy.fft.fftиscipy.optimize.differential_evolutionдля примеров.Внутренняя многопоточность SciPy реализована с использованием пулов потоков на уровне ОС. OpenMP не используется внутри SciPy.
SciPy хорошо работает с
multiprocessingи сthreading. Первый вариант имеет более высокие накладные расходы, чем второй, но широко используется и надежен. Второй может обеспечивать преимущества в производительности для некоторых сценариев использования - однако, пожалуйста, ознакомьтесь Потокобезопасность в SciPy.SciPy имеет экспериментальный поддержка свободнопоточного CPython, начиная с SciPy 1.15.0 (и Python 3.13.0, NumPy 2.1.0).
SciPy имеет экспериментальный поддержка в растущем числе подмодулей и функций для библиотек массивов, отличных от NumPy, таких как PyTorch, CuPy и JAX. Эти библиотеки по умолчанию используют параллельное выполнение и могут предложить значительные преимущества в производительности (и выполнение на GPU). См. Поддержка стандарта array API для получения дополнительной информации.