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