CPUよりもはるかに多くのジョブを実行する効率

user2509951

実行するジョブのセットが多数(数千)あり、それぞれが1つのCPUで30分から数時間かかります。メモリ要件は小さいです(それぞれ数KB)。私は数十個のCPUを搭載した小さなLinuxクラスターに取り組んでいます。これまで、クラスターを手動でビジー状態に保とうとして、一度に数個実行して開始しました。

私の質問は、CPUの数よりはるかに多い数百または数千を一度に送信するとどうなりますか?各ジョブを個別に実行するのに時間がかかることは明らかですが、CPUごとに一度に1つのジョブを実行するのと比較して、この方法の全体的な効率について疑問に思っています。進行状況を監視し、各CPUを正確に1つのジョブで占有し続ける(Pythonでのマルチプロセッシングの使用など)、より複雑なメソッドを作成することもできますが、これにはコストのかかるプログラマーの時間がかかり、最終結果が本当になるかどうか疑問に思います。より速く。

DataMatters

速度的には、スレッドがスリープ状態に多くの時間を費やしていない限り使用可能な物理スレッドよりも多くのスレッドを生成してパフォーマンスが向上する可能性はほとんどありません(その場合、他のスレッドに実行の機会が与えられます)。スレッドのスリープは、I / Oバウンドのプロセスやロックを競合するときに、暗黙的で非表示になる可能性があることに注意してください。

それは本当にあなたのスレッドが何かを待つことにほとんどの時間を費やしているかどうかに依存します(例:サーバーからより多くのデータが来る、ユーザーが何かをする、ファイルを更新する、ロックされたリソースにアクセスする)並行して可能な限り高速に。後者の場合、物理的に利用可能なスレッドよりも多くのスレッドを使用すると、速度が低下する傾向があります。タスクよりも多くのスレッドを持つことがスループットを向上させる唯一の方法は、それらのスレッドがスリープ時間を浪費し、他のスレッドがスリープ中に多くのことを実行する機会を生み出すことです。

ただし、これらすべてのタスクを生成して、オペレーティングシステムにスケジューリングを処理させる方が簡単な場合があります。

スレッドが大幅に増えると、(スループットの観点からも)速度が低下する可能性があります。スケジューリングとスレッドプールがどのように機能するか、およびそれらのスレッドがスリープに時間を費やすかどうかによって多少異なりますが、スレッドを構築するのは必ずしも安価なものではなく、その数のスレッドを使用するコンテキストスイッチは、独自のスケジューリングプロセスよりも高価になる可能性があります。実行する必要のある大量のスレッドを確認するだけのオペレーティングシステムよりも、正確に何をしたいのか、いつ適切なのかについて、より多くの情報があります。

Intelのスレッドビルディングブロックのような効率的なライブラリが、プール内のスレッドの数を物理ハードウェアに一致させるのには理由があります(それ以上でもそれ以下でもありません)。これは最も効率的なルートになる傾向がありますが、手動のスケジューリングや作業の盗用などの必要性を考えると、実装するのが最も厄介です。したがって、一度に大量のスレッドを生成するだけで便利な場合もありますが、通常は実行しません。他の回答で指摘されているようにI / Oバウンドであり、スレッドがほとんどの時間をスリープして入力を待っている場合を除いて、最適化としてこれを行います。

このようなニーズがある場合、それを最大限に活用する最も簡単な方法は、優れた並列処理ライブラリ(PPL、TBB、OMPなど)を見つけることです。次に、並列ループを作成し、ライブラリがスレッドを最も効率的に処理し、スレッド間の負荷を分散する方法に焦点を合わせます。このような場合、タスクが実行する必要があることに焦点を当てますが、必ずしもタスクが実行されるとは限りません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

CPUよりも多くの同時スレッドを実行できるのはなぜですか?

分類Dev

実行中または一時停止よりも多くのジョブが「開始」されているのはなぜですか?

分類Dev

SQLiteは予想よりも多くの値を要求する多くの実行

分類Dev

Matlabでこの行列演算を実行するためのより効率的なものはありますか?

分類Dev

javascriptコードをより効率的にするより多くの行を作成しないようにする

分類Dev

read_sql_queryは、実際のテーブル行よりもはるかに多くのレコードを返します

分類Dev

予想よりもはるかに多くの行を返すSPARQLクエリ

分類Dev

同時により多くのアクションを実行することは可能ですか?

分類Dev

DocumentDbからオブジェクト全体を読み取るのはより速く、より効率的ですか?

分類Dev

コードが想定よりもはるかに多く実行されるのはなぜですか?

分類Dev

コマンドラインから実行したときに実行可能jarがEclipseから実行した同じプロジェクトよりもはるかに多くのRAMを使用するのはなぜですか?

分類Dev

1ページに多くの読み取り専用Monaco差分ビューを効率的に配置するにはどうすればよいですか?

分類Dev

mysqlの同じテーブルにLEFTJOINよりも空の行を含めるより効率的な方法はありますか?

分類Dev

このPHPコードをより効率的に実行するにはどうすればよいですか?

分類Dev

Javascriptオブジェクトリテラルを多くの静的キー/値ペアで効率的に埋めるにはどうすればよいですか?

分類Dev

数式に対してこのパブリックサブを実行するためのより効率的な方法はありますか?

分類Dev

なぜC ++の構造体はCよりも多くのことを実行できるのですか?

分類Dev

なぜC ++の構造体はCよりも多くのことを実行できるのですか?

分類Dev

「crontab-e」よりもwebminではるかに多くのcronジョブが表示されるのはなぜですか?

分類Dev

代わりに、CPUがGPUよりも高速に行列演算を実行するのはなぜですか?

分類Dev

VirtualBoxが利用可能なCPUよりも多くのCPUを表示するのはなぜですか?

分類Dev

多くの動的SQLを実行する効率的な方法

分類Dev

SELECTクエリは、テーブルに存在する行よりも多くの行を調べます

分類Dev

KubuntuがYouTubeやその他のWebブラウジングで使用するWindowsよりもはるかに多くのCPUを使用しているのはなぜですか?

分類Dev

クラス内により多くのメソッドがあることは、オブジェクトが実行時により多くのメモリを使用することを意味しますか

分類Dev

DataprocでのSpark:CPUごとにより多くのエグゼキューターを実行することは可能ですか?

分類Dev

プロセスの数がPythonのCPUのスレッドの総数よりも多い場合、アプリケーションをより高速に実行できるのはなぜですか?

分類Dev

Excelファイルに多くのモジュールがあると、1つのモジュールに多くのサブがあるよりも実行が遅くなりますか?

分類Dev

PCは、実際に存在するよりも多くの起動方法を示すことができますか?

Related 関連記事

  1. 1

    CPUよりも多くの同時スレッドを実行できるのはなぜですか?

  2. 2

    実行中または一時停止よりも多くのジョブが「開始」されているのはなぜですか?

  3. 3

    SQLiteは予想よりも多くの値を要求する多くの実行

  4. 4

    Matlabでこの行列演算を実行するためのより効率的なものはありますか?

  5. 5

    javascriptコードをより効率的にするより多くの行を作成しないようにする

  6. 6

    read_sql_queryは、実際のテーブル行よりもはるかに多くのレコードを返します

  7. 7

    予想よりもはるかに多くの行を返すSPARQLクエリ

  8. 8

    同時により多くのアクションを実行することは可能ですか?

  9. 9

    DocumentDbからオブジェクト全体を読み取るのはより速く、より効率的ですか?

  10. 10

    コードが想定よりもはるかに多く実行されるのはなぜですか?

  11. 11

    コマンドラインから実行したときに実行可能jarがEclipseから実行した同じプロジェクトよりもはるかに多くのRAMを使用するのはなぜですか?

  12. 12

    1ページに多くの読み取り専用Monaco差分ビューを効率的に配置するにはどうすればよいですか?

  13. 13

    mysqlの同じテーブルにLEFTJOINよりも空の行を含めるより効率的な方法はありますか?

  14. 14

    このPHPコードをより効率的に実行するにはどうすればよいですか?

  15. 15

    Javascriptオブジェクトリテラルを多くの静的キー/値ペアで効率的に埋めるにはどうすればよいですか?

  16. 16

    数式に対してこのパブリックサブを実行するためのより効率的な方法はありますか?

  17. 17

    なぜC ++の構造体はCよりも多くのことを実行できるのですか?

  18. 18

    なぜC ++の構造体はCよりも多くのことを実行できるのですか?

  19. 19

    「crontab-e」よりもwebminではるかに多くのcronジョブが表示されるのはなぜですか?

  20. 20

    代わりに、CPUがGPUよりも高速に行列演算を実行するのはなぜですか?

  21. 21

    VirtualBoxが利用可能なCPUよりも多くのCPUを表示するのはなぜですか?

  22. 22

    多くの動的SQLを実行する効率的な方法

  23. 23

    SELECTクエリは、テーブルに存在する行よりも多くの行を調べます

  24. 24

    KubuntuがYouTubeやその他のWebブラウジングで使用するWindowsよりもはるかに多くのCPUを使用しているのはなぜですか?

  25. 25

    クラス内により多くのメソッドがあることは、オブジェクトが実行時により多くのメモリを使用することを意味しますか

  26. 26

    DataprocでのSpark:CPUごとにより多くのエグゼキューターを実行することは可能ですか?

  27. 27

    プロセスの数がPythonのCPUのスレッドの総数よりも多い場合、アプリケーションをより高速に実行できるのはなぜですか?

  28. 28

    Excelファイルに多くのモジュールがあると、1つのモジュールに多くのサブがあるよりも実行が遅くなりますか?

  29. 29

    PCは、実際に存在するよりも多くの起動方法を示すことができますか?

ホットタグ

アーカイブ