Поддержка параллельного выполнения в 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 для получения дополнительной информации.