0

初めて pthread をいじっていて、自分のマシンで実行しているときに奇妙なことに気付きました。

2 つの物理コアと 4 つの仮想コアを備えた Intel i5 を使用しています。

プログラムを 2 スレッドで実行すると、パフォーマンスが約 2 倍になりますが、4 スレッドで実行すると、2 スレッドと同じパフォーマンスが得られます。これはなぜですか?

2 つのスレッドでの結果: real 0m9.335s user 0m18.233s sys 0m0.132s

4 つのスレッドでの結果: real 0m9.427s user 0m34.130s sys 0m0.180s

編集: コードは完全に並列化可能で、スレッドは共有リソースなしで独立して実行されます。

4

4 に答える 4

2

実際には2つのコアしかないからです。ハイパースレッディングは、魔法のようにさらに 2 つのコアを作成するわけではありません。ハイパースレッディングにより、CPU で 4 つのスレッドを実行できますが、同時に実行することはできません。2 つの物理コアにスレッドを割り当て、実行パイプラインでスレッドを前後に切り替えます。

期待されるパフォーマンスの向上は、BEST 30% です。

于 2013-01-19T23:14:14.680 に答える
2

ハイパースレッディングは基本的に、CPU 上の予備の実行ユニットを別の実行スレッドに再利用する方法であることに注意してください。あなたはまだ 2 つのコアの馬力で作業しています。それは 4 つの方法で分割されています。

使用可能な EU のほとんどを完全に利用するようにコードが最適化されている場合、両方の物理コアで実行されると予備のリソースが残っていないため、ハイパースレッド コアはそれ以上のパフォーマンスを発揮できません。

于 2013-01-19T23:15:45.793 に答える
1

ハイパースレッディング (HT) が最初に導入されたときのこの古い記事では、それがどのように機能するかについて多くの詳細が説明されています (ただし、過去 10 年間で多くの改善が行われたと確信しています)。http://www.intel.com/technology/itj/2002/volume06issue01/vol6iss1_hyper_threading_technology.pdf :

各論理プロセッサは、アーキテクチャ状態の完全なセットを維持します。アーキテクチャ状態は、汎用レジスタ、制御レジスタ、高度なプログラマブル割り込みコントローラ (APIC) レジスタ、およびいくつかのマシン状態レジスタを含むレジスタで構成されます。ソフトウェアの観点からは、アーキテクチャの状態が複製されると、プロセッサは 2 つのプロセッサのように見えます。アーキテクチャの状態を保存するトランジスタの数は、全体のごく一部です。

ただし、次の文は、HT がボトルネックになる可能性がある場所を示しています。

論理プロセッサは、キャッシュ、実行ユニット、分岐予測子、制御ロジック、バスなど、物理プロセッサ上の他のほぼすべてのリソースを共有します。

スレッドの実行が、これらの共有リソース (実行ユニットやバスなど) の 1 つ以上を 100% ビジー状態に維持している場合、ハイパースレッディングはスループットを向上させません。ベンチマークはシステムの 1 つの側面を (意図的かどうかにかかわらず) 実行することが多いため、これらの共有プロセッサ リソースの 1 つがボトルネックになり、HT がメリットを発揮できなくなることは驚くべきことではありません。

于 2013-01-21T20:13:32.743 に答える
1

複数のスレッドを使用した場合のパフォーマンスの向上を判断するのは非常に困難です。ハイパースレッディングは、確かにパフォーマンスにおいて「余分なコアが 1 つ未満」です。

それに加えて、メモリスループットの問題に遭遇したり、コードがロックなどをめぐって競合したりする可能性があります。たとえば、コードがロックレスであっても、I/O や呼び出す関数の中には、完全に並行して実行できるものもあります。「隠れた」共有リソースが存在する場合があります。

しかし、ほとんどの場合、プロセッサはこれ以上速くなりません。

于 2013-01-19T23:21:55.300 に答える