大規模なモデリング用のPythonスクリプトを実行するための新しいマシンを購入しました。それぞれ4コア(Xeon、2.8GhZ)の2つのCPUがあります。各コアでは、4つの論理CPUコアに対してハイパースレッディングが有効になっています。
ここで問題が発生します。8つの別々の端末で同一のPythonプロセスを実行すると、top
コマンドは各プロセスがCPUを100%使用していることを示します。ただし、ターミナル1のプロセスはターミナル8のプロセスよりも約4倍遅く実行されています。これは私には奇妙に思えます...
プロセスがさまざまな(論理?)コアでどのようにスケジュールされているかと関係があるのでしょうか?誰かが私がどのようにしてすべてをほぼ同じ速度で走らせることができるかについての考えを持っていますか?
編集(larsmansに応じて):良い点。スクリプトは、約10,000回実行されるginatループです。各ループはテキストファイル(500行)を読み込み、読み込まれた量に対していくつかの基本的な計算を実行します。ループの実行中は、メモリの約0.2%を使用します。ループ中にディスクへの書き込みはありません。読み取りアクセスが制限要因になる可能性があることは理解できましたが、その場合に最も遅くなる最初のプロセスになるという事実に戸惑っています。より多くのプロセスを開始すると、速度が遅くなると予想していました...
time
ターミナルのコマンドを使用して、プロセスの時間を数回計測しました。
EDIT2:単一のコアがすべての読み取りと書き込みを処理するように指定されていることがあることを知りました-したがって、複数のプロセス(別々のコアで実行されている場合でも)はすべてのI/Oに単一のコアを使用します...コアの1つに影響を与えますが、すべてのコアにさまざまな処理速度を持たせるわけではありません。