私は共有クラスターで作業しています。このクラスターで並列化されたcコードを実行している人を見たことがあります。これは、top
を使用して実行中のプロセスを確認すると、4つを使用しているため(たとえば)CPUの400%を使用していることが示されます。コードの単一インスタンス用のプロセッサ。
今、誰かが並列化されたPythonコードを実行しています(私が聞いていることです)。ただし、top
がPythonコードをCPUの400%を使用していることを示す代わりに、それぞれが独自のプロセッサ(100%)を使用している4つの異なるプロセスとして示されています。
Python(並列化されている場合)はtop
で(Cではなく)多くの異なるプロセスを実行していると表示されますか、それともこのPythonコードは実際には実行されていませんか並行して?
StackExchangeがこの質問に適しているかどうかはわかりません。 top
を使用しているので、この場所の方が良いと思いました。移動する必要があるかどうか教えてください。
Cに表示されるのはスレッドを使用しているため、プロセスの使用量はそのすべてのスレッドの合計です。それぞれ100%のCPU使用率を持つ4つのスレッドがある場合、プロセスは400%と表示されます
pythonは、ほぼ確実にマルチプロセスモデルによる並列処理です。これは、Pythonのスレッド制限を克服することを目的としたモデルです。Pythonは、で1つのスレッドしか実行できません。時間(Pythonグローバルインタープリターロック-GILを参照)。それ以上のことを行うには、スレッドの代わりにプロセスを作成するマルチプロセスモジュールを使用できます。これは、psで表示されます。複数のプロセスとして、(それぞれ)シングルスレッドであるため、それぞれ最大100%のCPUを使用できます。
ps -afeT
を実行すると、Cプログラムのスレッドは表示されますが、pythonプログラムの追加のスレッドは表示されません。
参照Python実装、CPythonには、グローバルインタープリターロック(GIL)があり、並列でのみコードを実行できません同時に 。スレッド化はI/Oにのみ役立ちます。並列で実行するには複数のプロセスが必要です。見ているCコードは、代わりに並列処理にスレッド化を使用している可能性があります。