2012-04-25 16 views
2

大規模なモデリングのためのPythonスクリプトを実行する新しいマシンを購入しました。それは4つのコア(Xeon、2.8GhZ)を持つ2つのCPUを持っています。各コアには、4つの論理CPUコアに対してハイパースレッディングが有効になっています。同じPythonプロセス実行時間の大きな変化

問題:私は8つの別々の端末で同じpythonプロセスを実行すると、topコマンドは、各プロセスがCPUの100%を占めていることを示しています。しかし、端末1のプロセスは、端末8のプロセスより約4倍遅く実行されています。これは私には奇妙に思えます...

プロセスがさまざまな方法でスケジュールされる方法論理?)コア?誰も私がどのようにすべて同じスピードで走れるかという考えを持っていますか?

EDIT(larsmansへの応答):良い点。このスクリプトは約10,000回実行されるginatループです。各ループは、テキストファイル(500行)を読み込み、読み込まれた量に対して基本的な計算を実行します。ループが実行されている間は、メモリの約0.2%が使用されます。ループ中にディスクへの書き込みはありません。私は、読取りアクセスが制限要因になる可能性があることを理解できましたが、そうであれば最も遅くなる最初のプロセスであるという事実には戸惑います。私は、より多くのプロセスを開始するにつれてそれが遅くなると思っていたでしょう...

端末でtimeコマンドを使用して数回プロセスを実行しました。

EDIT2:単一のコアがすべての読み書きを処理するように指定されていることがわかったので、複数のプロセス(別々のコアで実行していても)がすべてのI/Oに対して1つのコアを使用します。ただし、これはコアの1つにのみ影響し、すべてのプロセッサがさまざまな処理速度を持つわけではありません。

+6

これは、あなたのスクリプトが何をしているのかを知らないと答えることは不可能です。初心者の方は、ディスクI/Oをやっていますか?タイミングを一度やり直しましたか、それともやり直しましたか? –

答えて

3

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

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

関連する問題