[英]Will multi-threading necessarily decrease runtime?
如果我有一系列CPU密集型操作,我的程序多線程是否必然會減少其運行時間? 這樣做的權衡取舍是什么? 在這種情況下,我正在嘗試計算一個非常大的矩陣的零空間。 我正在使用Python,特別是numpy包:
def nullspace(A, eps=1e-15):
"""Computes the null space of the real matrix A."""
n, m = shape(A)
if n > m :
return nullspace(transpose(A), eps)
_, s, vh = linalg.svd(A)
s = append(s, zeros(m))[0:m]
null_mask = (s <= eps)
null_space = compress(null_mask, vh, axis=0)
return null_space.tolist()
另外,我很想知道如何進行多線程這樣的功能。 提前致謝。
Python有全局解釋器鎖(GIL),它只允許一個線程一次與解釋器交互 - 實際上,這意味着你一次只能運行一個Python線程。 嘗試運行多個線程時,這是一個嚴重的缺點。
然而 , numpy
是建立在一個高度優化的數值線性代數庫之上,稱為LAPACK。 如果為系統安裝了正確版本的LAPACK,它將為您並行計算。 然后,您可以在LAPACK之上安裝numpy
,並且Python計算將被並行化。
這也意味着,許多numpy
操作釋放GIL,這樣就可以把火關長numpy
在Python線程運算,同時執行其他Python。 謝謝@JFSebastian。
不可以。首先,由於Global Interpreter Lock,CPU綁定程序很少從Python中的線程中受益。
此外,在單核機器上,線程根本不會減少運行時間。
通常GIL是獲得多線程優勢的障礙,除非您的python解釋器進行計算(例如C實現)。 我不確定這是否與numpy
。
如果你運行的線程不是很多,你應該看看多處理模塊。 你將有一個單獨的系統進程而不是python線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.