1

Pythonでスクリプトを実行すると問題が発生します。私はPythonで並列化を行っておらず、スクリプトを実行するためにmpiを呼び出していません。「pythonmyscript.py」を実行するだけで、1つのCPUのみを使用する必要があります。

ただし、コマンド「top」の結果を見ると、PythonがCPUのほぼ390%を使用していることがわかります。私はクアッドコアを持っているので、8スレッドです。これが私のスクリプトの実行速度を上げるのに役立っているとは思いません。そこで、Pythonが複数のCPUを使用している理由を理解し、使用を停止したいと思います。

興味深いのは、2番目のスクリプトを実行すると、そのスクリプトも390%を占めることです。3番目のスクリプトを実行すると、それぞれのCPU使用率が250%に低下します。しばらく前にmatlabで同様の問題が発生し、それを解決する方法は-singlecompthreadを使用してmatlabを起動することでしたが、Pythonで何をすべきかわかりません。

それが役立つ場合は、スクリプトでポアソン方程式(まったく並列化されていません)を解いています。


更新:私の友人は自分のコンピューターでコードを実行しましたが、100%CPUしかかかりません。BLASやMKLなどは使用していません。400%のCPU使用率の原因はまだわかりません。ライブラリSLATECには、Ax=bシステムを解決するFortranアルゴリズムがあります。その部分はCPUをたくさん使っていると思います。

4

3 に答える 3

2

あなたのコードは、C/C++/etc を使用するいくつかの関数を呼び出している可能性があります。下に。その場合、複数のスレッドを使用することが可能です。

より効率的に実装された関数への Python バインディングのみであるライブラリを呼び出していますか?

于 2012-05-03T09:00:53.973 に答える
1

あなたのコードは、OpenMP を使用するインテル® MKL または別のベンダー提供のライブラリーにリンクされている Python 用の SciPy またはその他の数値ライブラリーを使用している可能性がありますか? OMP_NUM_THREADS基礎となる C/C++ コードが OpenMP を使用して並列化されている場合、環境変数を 1 に設定することで単一のスレッドに制限できます。

OMP_NUM_THREADS=1 python myscript.py

インテル® MKL は、対応する並列ドライバー (デフォルトのリンク動作) とリンクされている場合、多くの場所 (LAPACK、BLAS、および FFT 関数) で確実に並列であり、デフォルトで、使用可能な CPU コアの数と同じ数の計算スレッドを開始します。

于 2012-05-04T09:01:51.113 に答える
1

プロセス アフィニティをいつでも設定して、1 つの CPU だけで実行することができます。Linux では「taskset」コマンドを使用し、Windows ではプロセス エクスプローラーを使用します。

このようにして、スクリプトが 1 つ以上の CPU を使用して同じパフォーマンスを発揮するかどうかを知ることができるはずです。

于 2012-05-03T10:13:40.037 に答える