5

16 コアのマシンと、途方もない並列プログラムがあるとします。私は多数の numpy ドット積と numpy 配列の追加を使用しています。マルチプロセッシングを使用していなければ、それは簡単なことです。numpy が、マルチスレッドを使用する blas のバージョンに対してビルドされていることを確認してください。しかし、私はマルチプロセッシングを使用しており、すべてのコアが常に一生懸命働いています。この場合、マルチスレッド blas を使用するメリットはありますか?

ほとんどの操作は (blas) タイプ 1 で、一部はタイプ 2 です。

4

2 に答える 2

6

コードが実際にマルチスレッド BLAS 呼び出しを使用しているという仮定については、少し注意する必要があるかもしれません。実際に基礎となる BLAS を使用する numpy オペレーターは比較的少数であり、実際にマルチスレッド化された BLAS 呼び出しは比較的少数です。は、操作に応じてnumpy.dotBLAS dotgemvまたはのいずれかを使用しますが、通常は のみがマルチスレッド化されます。これは、そうすることで O(N) および O(N^2) BLAS 呼び出しのパフォーマンス上の利点がほとんどないためです。レベル 1 およびレベル 2 の BLAS 操作に限定している場合、Atlas や MKL などのマルチスレッド BLAS で構築された numpy 実装を使用している場合でも、実際にマルチスレッド BLAS 呼び出しを使用しているとは思えませんgemmgemm

于 2011-10-14T09:42:58.880 に答える
2

すでにマルチプロセッシングを使用していて、すべてのコアが最大負荷になっている場合、プロセッサを待機するスレッドを追加してもほとんどメリットがありません。

アルゴリズムと実行内容によっては、あるタイプを使用する方が有益な場合がありますが、それは非常に依存的です。

于 2011-10-14T00:17:50.563 に答える