0

ハイパースレッディングのおかげで、4 つの論理プロセッサを備えたデュアル コア マシンを使用しています。C# で SHA1 プレイメージ ブルート フォース テストを実行しています。各スレッドでは、基本的に for ループを使用して SHA1 ハッシュを計算し、そのハッシュを探しているものと比較します。すべてのスレッドが完全に分離して実行されるようにしました。それらの間でメモリは共有されません。(1 つの変数: long カウントを除いて、次を使用して各スレッドでインクリメントします。

System.Threading.Interlocked.Increment(ref count);

2 スレッドで約 100 万 sha1/s、4 スレッドで 1.300 万 sha1/s が得られます。この場合、HT から 30% のボーナスを得る理由がわかりません。両方のコアがそれぞれの処理でビジーになるはずなので、スレッド数を 2 を超えて増やしても何のメリットもありません。誰でも理由を説明できますか?

4

3 に答える 3

4

ハイパースレッディングは、整数演算用により多くのコアを効果的に提供します。これにより、2 つの整数演算セットを単一の物理コアで並行して実行できます。私の知る限り、浮動小数点演算には役立ちませんが、おそらくSHA-1コードは主に整数演算であるため、速度が向上します。

もちろん、実際の物理コアを 4 つ持つほどではありませんが、もう少し並列処理を行うことができます。

于 2013-10-17T06:57:03.303 に答える
0

SMT/ハイパースレッディングでは、同じ物理コア上で複数のスレッド (通常は 2 つ) を実行できます。一方は通常、他方がストールに遭遇するのを待ってから、実行中のスレッドが切り替わります。

ストールが発生します -- ほとんどの場合、キャッシュ ミスが発生します。 同じメモリをトラバースしていない場合でも、そのメモリが既にキャッシュにあるという保証はありません (したがって、アクセス時にストールが発生します)、または別のスレッドがキャッシュの同じ行にマップされないという保証はありません。にメモリをマッピングします。

したがって、2 つのスレッドは、トラバースするデータが既にキャッシュに存在しない限り、ほとんどの場合 SMT/ハイパースレッディングの恩恵を受けます。これは実際には珍しいシナリオです。アルゴリズムは通常、データをプリフェッチする必要があり、さらにキャッシュが保持できる以上のデータを使用したり、他のスレッドがキャッシュしようとしているメモリを上書きしたりしない必要があります。これには、コア上の他のスレッドの知識が必要です。OSによって抽象化されているため、通常は不可能です。

ほとんどのアルゴリズムはそれほど調整されていません。特に、通常はコンソール専用のゲーム、またはキャッシュの特定の最小仕様を保証できる他のハードウェア専用のアプリケーションのみであり、さらに重要なことに、同時に実行されている他のスレッドの詳細な知識があるためです。同じコアで。これは、より大きなキャッシュが最新の CPU パフォーマンスにメリットをもたらす主な理由の 1 つでもあります。

于 2014-01-29T21:34:49.310 に答える