3

一連の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()

また、そのような関数をマルチスレッド化する方法を知りたいと思います。前もって感謝します。

4

3 に答える 3

2

いいえ。1 つには、グローバル インタープリター ロックが原因で、CPU バウンドのプログラムが Python のスレッド化の恩恵を受けることはほとんどありません。

また、シングルコア マシンでは、スレッド化によってランタイムがまったく短縮されることはありません。

于 2012-09-04T14:32:06.410 に答える
1

通常、GIL は、計算が Python インタープリター (C 実装など) から行われている場合を除いて、マルチスレッドの利点を得るための障害となります。これが に関係しているかどうかはわかりませんnumpy

あまり多くのスレッドを実行していない場合は、マルチプロセッシングモジュールを確認する必要があります。Python スレッドの代わりに、別のシステム プロセスが用意されます。

于 2012-09-04T14:53:27.113 に答える