Debian はどのようにして多数の CPU コアを活用するのでしょうか?

Debian はどのようにして多数の CPU コアを活用するのでしょうか?

24 コアの VPS のアカウントを取得しました (UnixBench によると、CPU は 24 個あります)。

  1. 一般的に言えば、Debian で汎用シェル コンピューティングにこれらすべてのコアを有効活用するにはどうすればよいでしょうか?
  2. シェルから長時間実行されるアプリを発行するときに、各プロセスを個別のコアで実行できるようにするために、何か特別なことを入力する必要がありますか? それとも、Debian はそれをすべて、私には見えない形で処理するのでしょうか?

答え1

特別なことをする必要はありません。どのスレッドをどの CPU に配置するかを決定するのはカーネルの役割であり、カーネルは人間よりもはるかに優れた仕事をします。

ただし、少なくとも 24 個の同時スレッドを実行できないのであれば、24 個の CPU を用意しても意味がありません。CPU の数が増えても、プログラムが魔法のように高速化されるわけではありません。複数の並列スレッドを持つようにコーディングされたプログラムだけが恩恵を受けますが、多くのプログラムは恩恵を受けません。それは、劣悪な方法でコーディングされているからではなく、本質的に並列化できないからです。

N 個の同時計算スレッドを持つプログラムは、最大 N 個の CPU の恩恵を受けることができます (ただし、スレッド間の同期には時間がかかるため、N 倍高速化しない可能性があります)。ほとんど相互作用しない M 個の異なるプログラムを実行する場合も、同様に M 個の CPU の恩恵を受けることができます (プログラムがマルチスレッドの場合はそれ以上の CPU の恩恵を受けることができます)。

並列処理を活用するために手動介入が必要となるケースがいくつかあります。複数のデータ処理タスクを開始する場合は、タスクが 1 つずつではなく、並列に生成されるように注意してください (CPU ごとに 1 タスク強)。たとえば、ソフトウェアを構築する場合は、-jにオプションを渡しますmake。その他の例と説明をいくつか参照してください。

Web サーバーを実行している場合、高負荷向けに設計されたすべての Web サーバーは並列処理の活用に優れています。Linux カーネルの最適化のパフォーマンスを評価する際、Apache がテスト ケースとして使用されます。ただし、CPU の並列処理は、データベース アクセスや入出力帯域幅による競合など、他のボトルネックがない場合にのみ役立つことに注意してください。

答え2

多数のコアを使用してパフォーマンスを高速化できるかどうかは、アプリケーションに大きく依存します。一部のアプリケーションはステップごとに実行する必要があります。特定のステップを計算するには、前のステップの結果を知る必要があるため、多数のコア間で並列に計算を分割する方法はありません。その場合、24 個のコアを使用することは、1 個のコアのみを使用する場合と同じくらい効果的です。

アプリケーションが互いに依存しない多くの処理を実行する必要がある場合、コアの数が多いと処理速度が大幅に向上します。 適切な例として、多数のソース ファイルを含むプロジェクトをコンパイルする場合、各ソース ファイルを個別にコンパイルしてから、異なるファイルをリンクすることができます。 このような場合、コンパイラーに各ファイルを別々のコアでコンパイルさせることができます。 複数の CPU コアを利用できるアプリケーションには通常、これを要求するためのスイッチがあります。 たとえば、GNU を使用してプロジェクトをコンパイルする場合make、スイッチに続けて数字を渡すことができます。 この数字は、同時に (つまり、異なるコアで) 開始する-jジョブの数を指定します。make

関連情報