5

クラウドインスタンスのすべてのコアを使用するようにスケールアップして、メモリを大量に消費するジョブ (私の場合は 2.5GB) を使用するときに、ひどいパフォーマンスに気付いた人はいますか?

クワッド xeon チップでローカルにジョブを実行すると、1 つのコアを使用する場合と 4 つのコアすべてを使用する場合の違いは、すべてのコアで約 25% 遅くなります。これは、私が理解していることから予想されます。コアが使い果たされるにつれてクロック レートが低下するのは、マルチコア チップ設計の一部です。

しかし、マルチコア仮想インスタンスでジョブを実行すると、1 つのコアを使用する場合とすべてのコアを使用する場合で、処理時間が 2 倍から 4 倍遅くなります。GCE、EC2、および Rackspace インスタンスでこれを見てきました。そして、私は多くの異なるインスタンス タイプをテストしましたが、ほとんどが提供されている最速のものです。

この動作は、メモリ使用量がほぼ同じサイズのジョブを持つ他の人にも見られましたか?

私が実行しているジョブは fortran で書かれています。私はそれらを書きませんでしたし、私は実際には Fortran の人ではないので、それらについての知識は限られています。I/O のニーズが低いことはわかっています。実行中にtopを見ると、CPU バウンドのように見えます。それらは相互に通信する必要なく実行されます。つまり、恥ずかしいほど並列です。それぞれ約 2.5GB のメモリを使用します。

これまでのところ、これだけ多くのメモリを消費するジョブは、仮想化レイヤーのメモリ管理によって大きな打撃を受けるというのが私の推測です。私のジョブが I/O リソースをめぐって競合している可能性もありますが、専門家によると、これはほとんどありそうにないようです。

今の私の回避策は、GCE を使用することです。これは、実際に私のラップトップのチップと同じ速度でジョブを実行するシングルコア インスタンスがあり、コアにほぼ比例して価格が設定されているためです。

4

1 に答える 1

1

データ アクセス パターンによっては、メモリ帯域幅の制約が発生している可能性があります。

問題の説明を完全には理解していないことは認めますが、 Linuxperfツールはこれについてある程度の洞察を与えるかもしれません. 私が正しく理解していれば:

  1. ラップトップでシングルスレッド プログラムの 1 つのコピーを実行すると、完了までに X 分かかります。

  2. ラップトップでシングルスレッド プログラムの 4 つのコピーを実行すると、各コピーが完了するまでに X * 1.25 分かかります。

  3. さまざまなクラウド インスタンスでシングル スレッド プログラムの 1 つのコピーを実行すると、完了までに X 分かかります。

  4. N コアの仮想クラウド インスタンスでシングルスレッド プログラムの N 個のコピーを実行すると、各コピーが完了するまでに X * 2 ~ 4 分かかります。

もしそうなら、カーネルの競合かメモリ I/O などの競合が発生しているようです。さまざまな Fortran コンパイラ オプションがメモリ アクセス パターンの最適化に役立つかどうかを調べるのは興味深いことです。たとえば、SSE2 のロード/ストア組み込み関数やその他の最適化を有効にします。結果を gcc および intel の fortran コンパイラと比較することもできます。

于 2014-07-29T04:40:23.473 に答える