コンピュータには、2つの物理コアと4つの論理コアがあります(たとえば、i5-3210Mプロセッサを搭載したコンピュータ)。
プログラムAが実行されると、htopは1つのコアの100%を使用し、他の3つのコアはほぼアイドル状態であることを示します。この場合のスループットはXです。
私の質問は、4つの論理コアでAの4つのインスタンスを実行する場合、合計スループットは4倍ですか、2倍ですか? 2つのインスタンスのみを実行するとどうなりますか?
coresの概念はそれほど単純ではありません。 論理コアは、各コアで実行できる物理コア×スレッドの数です。これはHyperThreadingとして知られています。 4コアプロセッサを搭載したコンピュータで、コアごとに2つのスレッドを実行する場合、8つの論理プロセッサを使用します。 lscpコマンドを実行すると、コンピューターのコア機能を確認できます。
プロセッサに4つのコアがあるが、8つのスレッドを並行して実行できる場合、4つの物理コア(処理ユニット)しかないことを意味します。ただし、そのハードウェアはparallelで最大8つのスレッドをサポートできます。コアで実行できるジョブは明らかに最大4つです。コアで実行されている1つのジョブは、何らかの方法でmemoryまたはI/O operationがストールした場合、別のスレッドがその空きコアを使用できます。
これで、コンピューターに2つの物理コアがあり、コアごとに2つのスレッドを実行できる場合、4つの論理プロセッサーがあることを理解する必要があります。つまり、2つの物理コアがあるため、2つのインスタンスしか実行できません。つまり、単一の物理コア(一度に2つのスレッド)の全機能を使用しています。したがって、スループットは50%になります。ただし、1つのスレッドがアイドルになると、コアはそのコアに1つのスレッドをロードできます。
[〜#〜] bios [〜#〜]( "Intel ht technology"のようなもの)でHyperThreadingをオフにして、現在のスループットは100%になるため、通常の機能とハイパースレッディング機能の違い。
タスクよりも多くのコアがあっても、完全にスケーリングすることはできません。ほとんどの場合、一部の州は共有されているためです。タスク内である必要はありませんが、たとえばカーネルです。または、ネットワークやディスクなど、同じリソースにアクセスする場合もあります。
[〜#〜] smt [〜#〜] (つまり、ハイパースレッディング)は、異なるタスクが異なるCPU実行ユニットを使用するという事実に依存する場合があります。そのため、いわゆる「命令レベルの並列処理」は スーパースカラーCP で実現できます。事実上、最新のx86プロセッサはスーパースカラーです。
他のCPU命令を使用せずに数値を追加するだけで構成される2つのタスクがあるとすると、そうです。同じ物理コアで実行すると競合し、パフォーマンスが大幅に低下する可能性があります。
ただし、ほとんどの場合、これは当てはまりません。さまざまなことが発生します。同じコマンドが両方の命令ストリームに(ほぼ)同時に表示されない限り、CPU実行ユニットの使用率を向上させることができます。
プログラムに個別のインスタンスを調整する方法がない場合、ほぼ確実に改善されません。
例:
2-10から素数を計算するシングルスレッドプログラムがある場合、それを実行する単一のインスタンスは、2-10からの各数値が素数であるかどうかを計算し、2、3、5、7が素数であることがわかります。
コードに変更を加えずに2番目のインスタンスを追加すると、最初のインスタンスは2〜10の各数が素数かどうかを計算し、2、3、5、7が素数であることがわかります。 2-10は素数であり、2、3、5、7が素数であることがわかります。
これを行うと、同じ作業が2回行われ、改善されません。