2016-11-16 10 views
0

環境:Openstack Ubuntu14.04vm 16個の仮想CPU。 私はCPU集約型のPythonプログラムを書いています。 scipy.optimizeツールを使用しました。 私はマルチプロセス/マルチスレッドを使用しませんでした。しかし、それを実行すると、pythonプロセスは17スレッドを生成し、すべてのCPUはほぼ完全に使用されます。マルチスレッドでマルチスレッドを自動的に実行しました

実行「トップ」コマンドとあなたはPID 4152のpythonのプロセスを見ることができますし、すべてのCPUが使用されている、this

よう

ファイル名を指定して実行「トップ-Hは4152 -p」とあなたはthis

のように、スレッドを見ることができます

なぜ、私はそれについて何もしなかったと考えて、マルチスレッドとマルチスレッドでPythonを実行していますか?

答えて

2

これはscipy.optimizeが行列の乗算などにBLASを使用するために発生します。Ubuntu 14.04はデフォルトでOpenBLASを使用し、OpenBLASはデフォルトで可能な限りすべての使用可能なコアを使用します。

私はあなたがシングルスレッドにしたい場合は、OPENBLAS_NUM_THREADS=1環境変数を設定できると思います。

+0

〜/ .bashrcにOPENBLAS_NUM_THREADS = 1を設定しても機能しません。マルチコア上でまだ実行中。 OpenBLASまたは他のライブラリを使用しているかどうかを確認するにはどうすればよいですか? – fringsoo

+0

ええ、多分私は間違っていて、OpenBLASはデフォルトではありません。ライブラリnumpyを確認するには、http://stackoverflow.com/questions/9000164/how-to-check-blas-lapack-linkage-in-numpy-scipy –

+0

を参照してください。ありがとう!問題が解決しました。 BLAS/LAPACKがデフォルトであるようです。 – fringsoo

2

scipyは、多くの一般的な操作に外部ライブラリ(特にBLASとLAPACK)を使用しています。システム上のこれらのライブラリの実装に応じて、多くの操作がマルチプロセッシング用に最適化されています。

関連する問題