簡體   English   中英

多線程是否必然會降低運行時間?

[英]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.

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