24コアのVPS(UnixBenchによると、24 CPU)のアカウントを取得しました。
- 一般的に、Debian のユニバーサルシェルコンピューティングのために、これらすべてのコアをどのように最大限に活用しますか?
- シェルで長期実行アプリケーションを起動するときに、各プロセスが別々のコア(利用可能な場合)で実行されるように特別なものを入力する必要がありますか?それともDebianはこのすべてを処理するのに私が見ることができませんか?
答え1
特別な作業を行う必要はありません。カーネルの作業は、どのスレッドがどのCPUで実行されているかを決定することであり、人間よりも優れています。
ただし、少なくとも24個の同時スレッドが実行されず、24個のCPUを持つことは意味がありません。より多くのCPUを使用できるとしても、プログラムが魔法のように速く実行されるわけではありません。複数の並列スレッドを持つようにコード化されたプログラムだけが利点を得ることができます。
N個の同時コンピューティングスレッドを持つプログラムは、最大N個のCPUを使用することで利点を得ることができます(スレッド間の同期に時間がかかるため、N倍速くないかもしれません)。別の対話なしでM個の異なるプログラムを実行すると、M個のCPUを同じように使用することになります(プログラムがマルチスレッドの場合はもっと多い)。
場合によっては、並列性を利用するために手動介入が必要です。複数のデータ処理ジョブを開始する場合は、順次生成されるのではなく、並列に(CPUあたり少し以上のジョブ)生成されることに注意してください。たとえば、ソフトウェアを構築すると、-j
オプションがに渡されますmake
。他の例と説明を参照してください。
- 4つのジョブを同時に実行しています...どうすればいいですか?
- プログラムは複数のファイルで並列に実行されます。
- デュアルコアCPUがあるときに人々が-j3オプションの使用を推奨するのはなぜですか?
- 最大X個のコマンドを並列に実行
Webサーバーを実行している場合、過負荷用に設計されたすべてのWebサーバーは並列処理を利用するのに役立ちます。 Linuxカーネル最適化のパフォーマンスを評価するときは、Apacheをテストケースとして使用してください。ただし、CPUの並列処理は、他のボトルネック(データベースアクセスや入出力帯域幅による競合など)がない場合にのみ役立ちます。
答え2
パフォーマンスを向上させるために複数のコアを利用することは、アプリケーションによって大きく異なります。一部のアプリケーションは段階的に実行する必要があります。特定のステップを計算するには前のステップの結果を知る必要があるため、計算を複数のコアに並列に分散する方法はありません。その場合、24個のコアを使用することは、1個のコアを使用するのと同じです。
他の場合には、アプリケーションが互いに依存しない多くのタスクを実行する必要があり、複数のコアがあるとタスクの速度が大幅に向上する可能性があります。関連例として、ソースファイルの多いプロジェクトをコンパイルする場合は、他のファイルをリンクする前に各ソースファイルを個別にコンパイルできます。この場合、コンパイラに別々のコアで各ファイルをコンパイルさせることができます。複数のCPUコアを使用できるアプリケーションには、通常要求できるスイッチがあります。たとえば、GNUでプロジェクトをコンパイルするときにスイッチと番号を渡すmake
ことができます。-j
この数字は、同時に開始する必要があるジョブの数を指定しますmake
(たとえば、他のコアで)。