PythonのCPU使用率を増やす方法


21

Pythonを使用していくつかのアルゴリズムを実行します。使用するPythonに関係なく、多くのバージョンを試しましたが、CPU使用率は最大25%になります。PythonがCPUリソースの残りを利用しないのはなぜですか?サービスの優先度を通常から高に変更し、その後再起動してリアルタイムに変更しましたが、何も変わりませんでした。

PythonにCPUの50%以上を使用させる方法はありますか?


あなたのCPUはマルチコアCPUですか?
ジャーニーマンオタク

はい、それはi5-480Mであり、コントロールパネル>電源オプション> cpu min / maxで100%
クリストスK.

回答:


20

簡単に言うと、4つの論理コアを備えたシステムでシングルスレッドアプリケーションを実行しているため、1つのプロセスですべてのコアを使用しています。

CPUをより多く使用するには、アルゴリズムを書き直してマルチスレッドにするか、特定のコアで2つ以上のインスタンスを実行できるかどうかを確認する必要があります(これは簡単なことではありません)。他に方法はありません。


私はこれが当てはまるのではないかと心配していましたが、WindowsタスクマネージャーのCPU使用図では、アルゴリズムの実行中に1つの図が選択されているのを見ることができません。
クリストスK.

1
システムはコア間で負荷を分散しています。それでも、2つのコアは一度に使用されません。
グローノスタジ

あなたは私の不安を確認した男は、それは私が、スレッドについて読み始める時間だそうです
クリストスK.

@ fractal_7:スレッド化は期待する利点をもたらさないかもしれません。以下の私の答えをご覧ください。
ローランドスミス

15

Python言語はマルチコアCPUよりも前のものであるため、マルチコアCPUをネイティブに使用しないのは奇妙なことではありません。

さらに、すべてのプログラムが複数のコアから利益を得られるわけではありません。次のステップが前のステップの結果に依存するステップで実行される計算は、より多くのコアを使用すると速くなりません。ベクトル化できる問題(同じ計算を大きなデータ配列に適用する)は、個々の計算が独立しているため、比較的簡単に複数のコアを使用できます。

あなたが多くの計算をしているとき、私はあなたがnumpyを使用していると仮定していますか?そうでない場合は、チェックしてください。ATLASのような最適化された線形代数ライブラリを使用できるCで記述された拡張機能です。標準のPythonと比較して、数値計算を大幅に高速化できます。

そうは言っても、Pythonで複数のコアを使用する方法はいくつかあります。

  • ビルトインはmultiprocessingモジュールです。このmultiprocessing.Poolクラスは、複数のCPUにわたるベクトル化map()と関連メソッドを提供します。ただし、ここにはトレードオフがあります。プロセス間で大量のデータを通信する必要がある場合、そのオーバーヘッドは複数のコアの利点を無効にする可能性があります。
  • numpyの適切なビルドを使用します。numpyがマルチスレッドATLASライブラリを使用して構築されている場合、大きな問題ではより高速になります。
  • numexprパラレルpythoncorepy、またはCopenhagen Vector Byte Codeなどの拡張モジュールを使用します。

threadingこの点に関して、モジュールはそれほど有用ではないことに注意してください。メモリ管理を簡単にするために、グローバルインタープリターロック(「GIL」)は、一度に1つのスレッドのみがPythonバイトコードを実行できるようにします。ただし、numpyなどの外部モジュールは、内部で複数のスレッドを使用できます。


これまでのところ、Python 2.7 ironpythonを使用してpypyを試しました。numpyにチャンスを与えます。ただし、マルチプロセッシングモジュールを使用する前に読む必要があります。
クリストスK.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.