2

GEMM コードをチューニングして、Eigen および MKL と比較しています。4 つの物理コアを持つシステムがあります。これまで、OpenMP のデフォルトのスレッド数 (私のシステムでは 8 つ) を使用してきました。これは少なくとも 4 つのスレッドと同じくらい良いと思いました。しかし、今日、Eigen と独自の GEMM コードを大規模な密行列 (1000x1000) で実行すると、8 スレッドではなく 4 スレッドを使用した方がパフォーマンスが向上することがわかりました。効率は 45% から 65% に跳ね上がりました。これはこのプロットにも見られると思います https://plafrim.bordeaux.inria.fr/doku.php?id=people:guenneba

違いはかなり大きいです。ただし、パフォーマンスははるかに不安定です。Eigen と私自身の GEMM コードの両方で、反復ごとにパフォーマンスが少し跳ね上がります。ハイパースレッディングによってパフォーマンスが大幅に低下することに驚いています。これは質問ではないと思います。これは予想外の観察であり、フィードバックを期待しています。

ハイパースレッディングを使用しないこともここで提案されていることがわかります。
Eigen ライブラリの行列積を高速化するには?

最大パフォーマンスの測定に関して質問があります。私が今行っていることは、CPUz を実行し、GEMM コードを実行しているときに周波数を確認し、その数値をコードで使用することです (私が使用しているオーバークロック システムでは 4.3 GHz)。すべてのスレッドでこの番号を信頼できますか? 最大値を決定するためにスレッドごとの頻度を知るにはどうすればよいですか? ターボブーストを適切に説明するにはどうすればよいですか?

4

3 に答える 3

4

ハイパースレッディングの目的は、待ち時間の長いコードの CPU 使用率を改善することです。ハイパースレッディングは、一度に 2 つのスレッドを処理することでこの待ち時間をマスクし、命令レベルの並列性を高めます。

ただし、適切に作成されたマトリックス製品カーネルは、優れた命令レベルの並列処理を示し、CPU リソースのほぼ 100% を活用します。したがって、2 番目の「ハイパー」スレッドの余地はなく、その管理のオーバーヘッドは全体的なパフォーマンスを低下させるだけです。

于 2013-04-19T15:26:48.493 に答える
1

マルチスレッド同時実行サービスのプロバイダーとして、ハイパースレッディングがさまざまな条件下でパフォーマンスに与える影響を調べてきました。自身の使用率の高いスレッドを実際に使用可能な物理プロセッサの数を超えないように制限するソフトウェアでは、HT の有無による違いはほとんどないことがわかりました。大量の計算作業のためにそれよりも多くのスレッドを使用しようとするソフトウェアは、そうしていることに気付かない可能性が高く、プロセッサの合計数 (HT では 2 倍になります) だけに依存し、実行速度が遅くなると予想されます。おそらく、HT を有効にすることで得られる最大の利点は、システムの残りの部分をクロールすることなく、すべての物理プロセッサを最大限に活用できることです。HT を使用しない場合、ホスト システムを正常に実行し続けるために、ソフトウェアは多くの場合、1 つの CPU を空けておく必要があります。

于 2013-09-07T19:17:06.507 に答える