私は 2011 年初頭の Quad Core i7 Mac を使用しています。ハイパースレッディングにより、多くのプログラムが 8 つの「コア」を報告します。並列実行するプログラムを作成する場合、このプログラムのインスタンスを 8 つ起動できますか、それとも 4 つだけでよいですか?
必要な数のスレッドを開始できることはわかりますが、プログラムの 4 または 8 のインスタンスが並行して実行されることになるのでしょうか?
答え1
Intel Core i7 プロセッサには 4 つの物理コアがありますが、各コアは一度に最大 2 つのスレッドを入力できるため、オペレーティング システムには「使用可能な論理 CPU」の形式で合計 8 つのスレッドが表示されます。
実際には、1 つのコアで一度に処理できるスレッドは 1 つだけですが、特別なキューイング / タイミング / スケジューリング メカニズムにより、2 つのスレッドが同時に「パイプライン」の異なるステージに存在できます。これにより、CPU は、一度に 1 つのスレッドのみを処理する場合よりも早く 2 つのスレッドを終了できます。両方のスレッドが同じパイプラインを共有しているため、パフォーマンスの利点は当然 2 倍にはなりません。ほとんどのテストでは、実行される命令の種類に応じて、利点は 10% から 50% の範囲であるとされています。
ご質問への回答としては、プログラムのインスタンスを 4、8、または 16 個起動すると、それらはすべて「実行」されますが、使用可能なスレッドの数に応じて、それぞれの命令がキューに入れられます。使用可能な物理コアの数 (たとえば 5 以上) を超えると、基本 4 を超えるスレッドは物理 CPU コアを共有するため、パフォーマンスが低下します。
最後に、利用可能な CPU スレッド機能の限界に達すると (8 スレッドを超える)、OS は命令のスケジュール設定/キューイングを開始し、パイプライン内の命令が完了するまで待機します。パフォーマンスに悪影響を及ぼし、システムのボトルネックになる可能性があるため、利用可能なスレッドを超えることは避けるのが理想的です。