2

大規模なモデリング用の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つに影響を与えますが、すべてのコアにさまざまな処理速度を持たせるわけではありません。

4

1 に答える 1

3

この理由の1つは、ハイパースレッディングの使用である可能性があります。HT論理CPUは、オペレーティングシステムには個別のCPUとして表示されますが、実際にはそうではありません。したがって、2つのスレッドが別々の論理(HT)CPUの同じコアで実行される場合、パフォーマンスは別々のコアで実行される場合よりも低くなります。

最も簡単な解決策は、ハイパースレッディングを無効にすることです。それが不可能な場合は、プロセッサアフィニティを使用して、各Pythonプロセスを個別のCPUに固定します。

于 2012-04-25T20:53:32.677 に答える