簡體   English   中英

numpy/scipy 中的哪些操作是多線程的?

[英]Which operations in numpy/scipy are multithreaded?

我正在研究一種算法,除了使用 numpy/scipy 之外,我沒有嘗試對其進行並行化。 查看htop ,有時代碼使用我的所有內核,有時只使用一個內核。 我正在考慮使用multiprocessing或類似的東西向單線程部分添加並行性。

假設我擁有所有並行的 BLAS/MKL 庫,是否有一些經驗法則可以用來猜測 numpy/scipy ufunc 是否將是多線程的? 更好的是,是否有記錄在案的地方?

為了弄清楚這一點,我查看了: https://scipy.github.io/old-wiki/pages/ParallelProgramming,Python :如何從多線程中停止 numpy? , python/numpy 中的多線程 blas

您可以嘗試獲取IDP軟件包( 用於Python的英特爾®發行版),其中包含NumPy *,SciPy *和scikit-learn *版本以及集成的英特爾®數學內核庫。

無論這樣做是否合理,這都會使您自動對所有Lapack例程進行線程化。 在這里,您可以找到線程mkl的功能列表: https ://software.intel.com/zh-cn/mkl-linux-developer-guide-openmp-threaded-functions-and-problems

numpyscipy固有的例程默認情況下允許單線程。 您可以根據需要進行更改。

# encoding: utf-8
# module numpy.core.multiarray
# from /path/to/anaconda/lib/python3.6/site-packages/numpy/core/multiarray.cpython-36m-darwin.so
# by generator 1.145
# no doc
# no imports

# Variables with simple values

ALLOW_THREADS = 1

編譯numpy ,可以通過更改NPY_ALLOW_THREADS來控制線程:

./core/include/numpy/ufuncobject.h:#if NPY_ALLOW_THREADS
./core/include/numpy/ndarraytypes.h:        #define NPY_ALLOW_THREADS 1

至於外部庫,我主要發現numpyscipy可以包裹舊版Fortran代碼( QUADPACKLAPACKFITPACK等等)。 這些庫中的所有子例程都在單個線程上計算。

至於MKL依存關系,您鏈接的SO帖子足以回答問題。

請嘗試設置全局變量OMP_NUM_THREADS 它適用於我的 scipy 和 numpy。我使用的功能是,

ling.inv()A.dot(B)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM